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

0 ответов

Другие вопросы по тегам