excel - ¿Obtiene el error "método no válido sin objeto adecuado" al intentar realizar una solicitud HTTP en VBA?
rest excel-vba (4)
Echa un vistazo a este:
https://github.com/VBA-tools/VBA-Web
Es una biblioteca de alto nivel para tratar con REST. Es OOP, funciona con JSON, pero también funciona con cualquier otro formato.
Intenté seguir este ejemplo: http://libkod.info/officexml-CHP-9-SECT-5.shtml - Archive.org - Donate
pero dio este error
en esta linea:
Dim objHTTP As New MSXML2.XMLHTTP
Intenté usar este ejemplo: ¿Cómo puedo enviar una solicitud HTTP POST a un servidor desde Excel usando VBA?
pero dio este error:
en esta linea:
Print objHTTP.Status
Entonces, ¿cómo hago una llamada POST REST en VBA? ¿Cómo hago una llamada REST de carga de archivos de datos de varias partes / formulario PUT en VBA?
Herramientas> Referencias
Código
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
Referencia
Objeto WinHttpRequest: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384106(v=vs.85).aspx
Para leer datos REST, al menos OData Considere Microsoft Power Query. No podrás escribir datos. Sin embargo, puedes leer los datos muy bien.
Probablemente no haya agregado una referencia a Microsoft XML
(ninguna versión) para Dim objHTTP As New MSXML2.XMLHTTP
en el cuadro de diálogo Herramientas / Referencias ... de la ventana de VBA.
Además, es una buena idea evitar el uso de enlaces tardíos ( CreateObject
...); es mejor usar el enlace temprano ( Dim objHTTP As New MSXML2.XMLHTTP
), ya que el enlace temprano le permite usar Intellisense para enumerar a los miembros y hacer todo tipo de validación en tiempo de diseño.
Tuve que usar Debug.print
lugar de Print
, que funciona en la ventana Inmediato.
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