Как сделать REST-вызов с помощью VBA в Excel?
Я попытался следовать этому примеру: http://libkod.info/officexml-CHP-9-SECT-5.shtml - Archive.org - Donate
но он дал эту ошибку
![Imgur]()
в этой строке:
Dim objHTTP как новый MSXML2.XMLHTTP
Я попытался использовать этот пример: Как отправить запрос HTTP POST на сервер из Excel с помощью VBA?
но он дал эту ошибку:
![Imgur]()
в этой строке:
Print objHTTP.Status
Итак, как мне сделать вызов POST REST в VBA? Как сделать файл PUT с несколькими частями/формами данных загружать REST-вызов в VBA?
Инструменты > Ссылки
![Imgur]()
Код
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"":""[email protected]"",""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
Ответы
Ответ 1
Вероятно, вы не добавили ссылку на Microsoft XML
(любая версия) для Dim objHTTP As New MSXML2.XMLHTTP
в диалоговом окне "Инструменты/ссылки" VBA.
Кроме того, рекомендуется избегать использования позднего связывания (CreateObject
...); лучше использовать раннее связывание (Dim objHTTP As New MSXML2.XMLHTTP
), поскольку раннее связывание позволяет вам использовать Intellisense для перечисления членов и выполнения всех видов проверки времени разработки.
Ответ 2
Мне пришлось использовать Debug.print
вместо Print
, который работает в окне Immediate.
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"":""[email protected]"",""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
Ответ 3
Проверьте это:
https://github.com/VBA-tools/VBA-Web
Это библиотека высокого уровня для работы с REST. Это OOP, работает с JSON, но также работает с любым другим форматом.