19

我试着按照这个例子: http: //libkod.info/officexml-CHP-9-SECT-5.shtml - Archive.org - Donate

但它给出了这个错误

伊姆古尔

在这条线上:

Dim objHTTP As New MSXML2.XMLHTTP

我尝试使用此示例:如何使用 VBA 从 Excel 向服务器发送 HTTP POST 请求?

但它给出了这个错误:

伊姆古尔

在这条线上:

Print objHTTP.Status

那么如何在 VBA 中进行 POST REST 调用呢?如何在 VBA 中进行 PUT 多部分/表单数据文件上传 REST 调用?

工具 > 参考

伊姆古尔

代码

Sub SendEmail()
    'Dim objHTTP As New MSXML2.XMLHTTP
    'Set objhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://localhost:8888/rest/mail/send"
    objHTTP.Open "POST", URL, False
    objHTTP.send ("{""key"":null,""from"":""me@me.com"",""to"":null,""cc"":null,""bcc"":null,""date"":null,""subject"":""My Subject"",""body"":null,""attachments"":null}")
    Print objHTTP.Status
    Print objHTTP.ResponseText
    
End Sub

参考

WinHttpRequest 对象: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa384106 (v=vs.85).aspx

4

4 回答 4

15

您可能没有在 VBA 窗口的 Tools/References... 对话框中添加对Microsoft XML(任何版本)的引用。Dim objHTTP As New MSXML2.XMLHTTP

此外,最好避免使用后期绑定 ( CreateObject...);最好使用早期绑定 ( Dim objHTTP As New MSXML2.XMLHTTP),因为早期绑定允许您使用 Intellisense 列出成员并进行各种设计时验证。

于 2013-10-23T22:51:08.157 回答
14

我不得不使用Debug.print而不是Print,它在立即窗口中工作。

Sub SendEmail()
    'Dim objHTTP As New MSXML2.XMLHTTP
    'Set objHTTP = New MSXML2.XMLHTTP60
    'Dim objHTTP As New MSXML2.XMLHTTP60
    Dim objHTTP As New WinHttp.WinHttpRequest
    'Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    'Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://localhost:8888/rest/mail/send"
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "Content-Type", "application/json"
    objHTTP.send ("{""key"":null,""from"":""me@me.com"",""to"":null,""cc"":null,""bcc"":null,""date"":null,""subject"":""My Subject"",""body"":null,""attachments"":null}")
    Debug.Print objHTTP.Status
    Debug.Print objHTTP.ResponseText

End Sub
于 2013-10-23T23:36:27.027 回答
12

看看这个:

https://github.com/VBA-tools/VBA-Web

这是一个处理 REST 的高级库。它是 OOP,适用于 JSON,但也适用于任何其他格式。

于 2014-03-10T12:30:31.480 回答
0

对于读取 REST 数据,至少 OData 考虑 Microsoft Power Query。您将无法写入数据。但是,您可以很好地读取数据。

于 2018-09-01T02:42:41.310 回答