私はvbaのクラスプログラミングには新しいです。ここでクラスインスタンスからデータを取得する方法
は の指導を使用して、私の最初の試みである:Asynchronous HTTP POST Request in MS Access
私はワードVBAを使用しています。ここで
は、ここに私のCXMLHTTPHandler.cls
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "CXMLHTTPHandler"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit
Dim m_xmlHttp As MSXML2.XMLHTTP
Public Sub Initialize(ByRef xmlHttpRequest As MSXML2.XMLHTTP)
Set m_xmlHttp = xmlHttpRequest
End Sub
Sub OnReadyStateChange()
Attribute OnReadyStateChange.VB_UserMemId = 0
Debug.Print m_xmlHttp.readyState
If m_xmlHttp.readyState = 4 Then
If m_xmlHttp.Status = 200 Then
msgbox m_xmlHttp.responseText
Else
msgbox "Something Went Wrong"
End If
End If
End Sub
である私の標準モジュール
Option Explicit
Public xmlHttpRequest As MSXML2.XMLHTTP
Function sasynchreq(url As String)
On Error GoTo FailedState
If Not xmlHttpRequest Is Nothing Then Set xmlHttpRequest = Nothing
Dim MyXmlHttpHandler As CXMLHTTPHandler
Set xmlHttpRequest = New MSXML2.XMLHTTP
'Create an instance of the wrapper class.
Set MyXmlHttpHandler = New CXMLHTTPHandler
MyXmlHttpHandler.Initialize xmlHttpRequest
'Assign the wrapper class object to onreadystatechange.
xmlHttpRequest.OnReadyStateChange = MyXmlHttpHandler
'Get the page stuff asynchronously.
xmlHttpRequest.Open "GET", url, True
xmlHttpRequest.send ""
Exit Function
FailedState:
msgbox Err.Number & ": " & Err.Description
End Function
Sub test()
Dim url As String, do_something As String
url = "http://httpbin.org/html"
do_something = sasynchreq(url)
'do somethign with do_something
End Sub
すべてが正常に動作しています。たとえば、テストサブなどの変数にhttprequestを割り当てる場合はどうすればよいですか?
ありがとうございました。私は欠けている部分がコールバックを待っていると思います。 – Rahul
申し訳ありませんが、私はあなたの質問に誤解しました。あなたのリンクを読むまでは、VBAでは非同期タスクが不可能だと思っていました。私は、「待っている」結果と同等のものを得る方法がわからないのではないかと心配しています。おそらく、オブジェクトを取得する方法とタイミングを表示するために質問を編集します。コードのその部分を 'OnReadyStateChange'ルーチンの中に置くことさえあるかもしれません。 – Ambie