Как сделать 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, но также работает с любым другим форматом.