我在Excel VBA中做这个HTTP POST,它对我来说工作得很好,除了一次我得到了与我同事相同的错误。他每次都能可靠地得到错误,从同一个工作簿运行代码。错误总是发生在循环的第一次迭代中。
当错误发生时,当它试图运行发送行时,它进入VBA错误处理程序,但没有VBA错误,并且httpRequest.Status和httpRequest.responseText没有填充,因为httpRequest已设置为Nothing。
我的设置和他的设置之间的差异是,我运行64位Windows,而他仍然在32位Windows上,他的计算机是由雇主设置的,而我是一个承包商,使用我自己的计算机,这是一个默认的零售Windows设置。
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
'loop through the param strings in the array:
For iArrayPubIndex = 1 To iArrayPubCount
sAllParams = arrayPub(iArrayPubIndex)
httpRequest.Open "POST", sApiUrl, False
httpRequest.setRequestHeader "Content-Type", "application/json"
httpRequest.setRequestHeader "x-api-key", API_KEY
httpRequest.send sAllParams
DoEvents
Next iArrayPubIndex
任何建议?
**我应该使用MSXML2.XMLHTTP的替代方案吗?”””我看起来像我看到了一些不同的。这是我在这个项目上继承的。
更新:
我们尝试了MSXML2.XMLHTTP.6.0,我相信这是最新的版本。同样的结果。
1条答案
按热度按时间hgqdbh6s1#
我们偶然发现了答案。原来,32位版本的MSXML2.XMLHTTP似乎要求Send方法的params参数(在我的示例中为sAllParams)类型为Variant。我把它写成了String。
我们发现这一点是因为他写的一个初步样本对他来说工作得很好。把我的变量插入他的样本对他来说仍然很有效。我试图理解为什么他的样本对他有用而我的样本却不行,我意识到他没有声明任何变量;他允许他们都默认为变体。当我将sAllParams的声明从String改为Variant时,它对他来说工作得很好。
在我的计算机上,64位版本的MSXML2.XMLHTTP可以将sAllParams声明为String或Variant。