Почему эта функция получения данных 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 и что я могу изменить, чтобы она заработала?