如何向VBA发送Async XMLHTTP请求?
为了从Excel中的web服务获取数据,我创建了一个excel插件提供函数来获取它;用户只需要在类型细胞: =sendRequest("http://webservice.com")
如何向VBA发送Async XMLHTTP请求?
我有2个Excel文件在于向世人证明了两个sending request
方法:1。synchronous和2 asynchronous
在sync
方法,该功能可以发送请求和normaly获取数据。但是,如果我们有100个,200个单元格称它,它将需要Excel等待大量的时间;这也使得Exel成为而不是重新编码。
我给这家目前的解决方案是使用async
方法below code
Public Function sendAsyncRequest(URL)
'other statement
' Get some stuff asynchronously.
xmlHttpRequest.Open "GET", URL, True
xmlHttpRequest.send
sendAsyncRequest = xmlHttpRequest.responseText
End Function
但单元格的值常是是零0而不是repsone文本。
我必须使用我的处理程序类将其与OnReadyStateChange
的xmlHttpRequest object
绑定,以将响应文本设置为单元格。但是,它也清除了单元格的公式。
所以我的问题是如何更改单元格的显示文本而不更改其公式?
我也欢迎另一种解决方案发送请求并获得async
方法返回值。
作为解决方案的缺点说here,该propper的方式来获得异步返回值的功能是1)缓存您的request's url => returned value
收集/ dicitonary,然后2)刷新您的公式
这是我的solution file为您的问题;确实它是从您的async test file更新的。
基于this discusion,您可以change the display text of cell without changing its formula
使用范围(yourCellAddress).NumberFormat = “0 0 0”; “值,显示” “”
所以你的问题,解决的办法是
-
在你
sendAsyncRequest
功能更换回线sendAsyncRequest = "anything other than numbers"
-
在你
ReadyStateChangeHandler
子,更换Application.Range(cellAddress).Value = XMLHttpReq.responseText 'return responseText to cell
通过
cellDisplayText = XMLHttpReq.responseText
Range(cellAddress).NumberFormat = "0;0;0;""" & cellDisplayText & """"
我也在这里重构了一个更好的代码的解决方案https://dl.dropbox.com/u/6194904/2012/TestHttpReqest%20-%20ASync%20-%20NN。xlsm – 2012-07-12 05:51:10
这种解决方案的一个缺点是,我们看到的“显示文本”的值实际上不是单元格值;单元格值是“除数字之外的任何东西”。因此,如果单元格A1的“显示值”为122,并且我们在单元格A2的公式中使用它,比如说“= A1 + 1”,那么值不是123,但会导致错误(由于将字符串添加到数字) – 2012-07-12 12:22:59
我的答案有一个关键的缺点,绝对不应该被接受。请取消选中它。 – 2012-07-12 12:23:37