У меня есть эта функция в 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 и что можно изменить, чтобы она заработала?