為什麼這個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 中掛起?

相關內容