在Excel VBA中HTTP POST上将HttpRequest对象设置为Nothing

yhuiod9q  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(123)

我在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,我相信这是最新的版本。同样的结果。

hgqdbh6s

hgqdbh6s1#

我们偶然发现了答案。原来,32位版本的MSXML2.XMLHTTP似乎要求Send方法的params参数(在我的示例中为sAllParams)类型为Variant。我把它写成了String。
我们发现这一点是因为他写的一个初步样本对他来说工作得很好。把我的变量插入他的样本对他来说仍然很有效。我试图理解为什么他的样本对他有用而我的样本却不行,我意识到他没有声明任何变量;他允许他们都默认为变体。当我将sAllParams的声明从String改为Variant时,它对他来说工作得很好。
在我的计算机上,64位版本的MSXML2.XMLHTTP可以将sAllParams声明为String或Variant。

相关问题