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

Связанный контент