VBAを介してWebサービスに接続する(たとえば、HTTPリクエストを送信する)ことは可能ですかin Microsoft Access?たとえば、ユーザーがフォームのボタンをクリックすると、HTTPリクエストがOK
で応答するWebサービスに送信されます。
誰かが以前にこれをしたことがありますか?
注:VB.NETではなくVBA。
これは、Access 2003で非常にうまく使用したコードです。これは、何年も前にコピーおよび再コピーされたインターウェブからのものです。 XMLHttpRequest Object を作成し、HTTP GETリクエストを送信し、結果を文字列として返します。
Public Function http_Resp(ByVal sReq As String) As String
Dim byteData() As Byte
Dim XMLHTTP As Object
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
XMLHTTP.Open "GET", sReq, False
XMLHTTP.send
byteData = XMLHTTP.responseBody
Set XMLHTTP = Nothing
http_Resp = StrConv(byteData, vbUnicode)
End Function
sReqはURLです。関数は応答を返します。参照の下でActiveXデータオブジェクトが有効になっていることを確認する必要がある場合があります(VBAエディターで[ツール]> [参照]に移動します)。
これは私が使用したコードです。このコードを機能させるには、最初にMicrosoft XMLV6を参照する必要があります。
Public Sub GetPerson()
'For API
Dim reader As New XMLHTTP60
reader.Open "GET", "www.exmple.com/users/5428a72c86abcdee98b7e359", False
reader.setRequestHeader "Accept", "application/json"
reader.send
Do Until reader.ReadyState = 4
DoEvents
Loop
If reader.Status = 200 Then
Msgbox (reader.responseText)
Else
MsgBox "Unable to import data."
End If
End Sub
いくつかのプロジェクトで「MicrosoftOffice2003 Webサービスツールキット2.01」ツールキット(利用可能 ここ )を使用しました。それは私にとってはかなりうまくいきましたが、それが話しているWebサービスも書いたので、実際に機能させるときにプロセスの両端をいじることができるという贅沢がありました。 :)
実際、これらのアプリの1つをAccess_2003からAccess_2010にアップグレードしたところ、アプリのSOAPクライアント部分は変更なしで引き続き機能しました。ただし、展開前のテスト中に1つのしわが発生しました。
私のアプリは、SoapClient30
オブジェクトの早期バインドが気に入らなかったため、32ビットOffice_2010を実行している64ビットマシンではコンパイルできませんでした。そのオブジェクトに遅延バインディングを使用するように切り替えると、コードはコンパイルされますが、機能しませんでした。そのため、その特定のアプリでは、64ビットマシンで64ビットOfficeを実行する必要があるという制限を追加する必要がありました。
また、Microsoftの公式の見解は、「すべてのSOAPツールキットはMicrosoft.NET Frameworkに置き換えられました。」(参照 ここ )であることに注意してください。