web-dev-qa-db-fra.com

Obtenir l'erreur "méthode non valide sans objet approprié" lors d'une tentative de requête HTTP dans VBA?

J'ai essayé de suivre cet exemple: http://libkod.info/officexml-CHP-9-SECT-5.shtml - Archive.org - Donate

mais il a donné cette erreur

Imgur

sur cette ligne:

Dim objHTTP As New MSXML2.XMLHTTP

J'ai essayé d'utiliser cet exemple: Comment puis-je envoyer une demande HTTP POST à un serveur à partir d'Excel à l'aide de VBA?

mais il a donné cette erreur:

Imgur

sur cette ligne:

Print objHTTP.Status

Alors, comment puis-je passer un appel POST REST dans VBA? Comment puis-je effectuer un appel PUT de téléchargement de fichier en plusieurs parties/données de formulaire REST dans VBA?

Outils> Références

Imgur

Code

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

Référence

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

19
Chloe

Vous n'avez probablement pas ajouté de référence à Microsoft XML (aucune version) pour Dim objHTTP As New MSXML2.XMLHTTP dans la boîte de dialogue Outils/Références ... de la fenêtre VBA.

En outre, il est judicieux d’éviter d’utiliser une liaison tardive (CreateObject...); Il vaut mieux utiliser la liaison anticipée (Dim objHTTP As New MSXML2.XMLHTTP), car elle vous permet d’utiliser Intellisense pour répertorier les membres et effectuer toutes sortes de validations au moment de la conception.

15
Monty Wild

Je devais utiliser Debug.print au lieu de Print, qui fonctionne dans la fenêtre 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
13
Chloe

Découvrez celui-ci:

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

C'est une bibliothèque de haut niveau pour traiter avec REST. C'est la POO, fonctionne avec JSON, mais aussi avec tout autre format.

12
przemo_li

Pour lire les données REST, au moins OData Considérons Microsoft Power Query. Vous ne pourrez pas écrire de données. Cependant, vous pouvez très bien lire les données.

0
Justin Dearing