我在 VBA 中有这个函数,之前我在 Excel 中成功地使用它从 URL 获取数据:
'========================================================
Public Function sURLfetch(ByVal sURL As String) As String
'========================================================
' Return data found at a URL.
' From "www.MyExcelGenius.com/getting-data-from-a-website-in-json-format-using-vba/".
' Requires reference "Microsoft XML, v6.0".
Const bRunAsynch As Boolean = True
Const nProcessComplete As Integer = 4
Dim oRequest As MSXML2.XMLHTTP60
Set oRequest = New MSXML2.XMLHTTP60
Dim sResponse As String
With oRequest
.Open "get", sURL, bRunAsynch
.setRequestHeader "Content-Type", "application/json"
.send
Do While oRequest.ReadyState <> nProcessComplete
DoEvents
Loop
sResponse = .responseText
End With
sURLfetch = sResponse
'========================================================
End Function ' sURLfetch()
'========================================================
我现在从另一个函数调用此函数,而这个函数是从 Access 中的查询调用的。当我这样做时,如果我尝试不间断地运行此函数,则对此函数的调用会挂起。但如果我在以下行上设置断点:
Do While oRequest.ReadyState <> nProcessComplete
然后告诉 VBA 继续,它就会运行。但是,如果我删除该断点并在以下行上设置断点:
sResponse = .responseText
然后它就挂了。
因此,看起来,当从 Access 调用此函数时,它会挂在循环中,除非在进入循环之前通过断点指示它暂停。
我尝试通过插入一个随机暂停 VBA 的函数调用来自动暂停。但这并没有阻止该函数挂起。
概括:
- 该函数以前在 Excel 中运行过。
- 如果它在循环开始时被断点暂停,它就可以在 Access 中工作。
- 如果在 Access 中调用它而没有该断点,它就会挂起。
什么原因导致此功能在 Access 中挂起?我应该进行哪些更改才能使其正常工作?