MSXML2.serverXMLHTTPオブジェクトを使用して、特定のURLのHTTPステータスを返すこの便利なVBA関数を作成しました。この関数は同期的に実行され、要求が解決されるまでコードの残りの部分はフリーズします。これを非同期呼び出しにするにはどうすればよいですか?VBA HTTPを使用した非同期データ呼び出し
現在の作業機能:
Function page_http_status(url) As String
Dim XMLHTTP As Object
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHTTP.send
page_http_status = XMLHTTP.Status
End Function
onreadystatechangeに試行
私は名前のコールバック関数をトリガすることができますXMLHTTP.onreadystatechangeイベントがある知っているが、どのように私はこれをトリガすることができます関数はの値を返します。page_http_status()?
XMLHTTP.onreadystatechange = FunctionReadyStateChange
、その後
Function FunctionReadyStateChange()
MsgBox ("Request received! " & XMLHTTP.Status)
End Function
https://msdn.microsoft.com/en-us/library/ms757849(v=vs.85).aspx - 第3パラメータに注意してください。 – user2864740
要求が非同期に処理された場合、要求が完了していないため、関数*は応答に基づいて文字列を返すことができません。 – user2864740
あなたの 'XMLHTTP'は、イベントがとにかく起こる前に範囲外に出るでしょう。 'XMLHTTP'を関数の外で、おそらくモジュール内で' Public'として定義してください。 –