为什么这个 VBA 数据获取函数在 Access 中挂起?

为什么这个 VBA 数据获取函数在 Access 中挂起?

我在 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 中挂起?我应该进行哪些更改才能使其正常工作?

相关内容