VBA使用HTTP进行asynchronous数据调用

我已经做了这个方便的VBA函数,它使用MSXML2.serverXMLHTTP对象返回给定URL的HTTP状态。 这个函数是同步执行的,其余的代码冻结,直到请求被parsing。 如何把这个变成asynchronous调用?

目前的工作function:

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事件,可以触发一个命名的callback函数,但我怎么能触发这个函数返回page_http_status()的值?

 XMLHTTP.onreadystatechange = FunctionReadyStateChange 

接着

 Function FunctionReadyStateChange () MsgBox ("Request received! " & XMLHTTP.Status) End Function 

进一步阅读后,我意识到VBA根本不支持开箱即用的callback函数。

使用XMLHTTP.onreadystatechange是一个可行的解决scheme,但它需要解决两个限制:

1)XMLHTTP必须公开声明,以保持对象的范围可用于“callback”(这很好)。

2)原始函数不能返回一个值,所以我将不得不将输出保存在一个过程中(而不是返回输出的“标量”函数)。