我在 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 中掛起?