¿Por qué esta función de obtención de datos de VBA se bloquea en Access?

¿Por qué esta función de obtención de datos de VBA se bloquea en Access?

Tengo esta función en VBA, que he usado con éxito antes en Excel para recuperar datos de una 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()
'========================================================

Ahora estoy llamando a esta función desde otra función, a la que llamo desde una consulta en Access. Cuando hago eso, la llamada a esta función se bloquea si intento ejecutarla sin interrupciones. Pero si establezco un punto de interrupción en la línea:

Do While oRequest.ReadyState <> nProcessComplete

y luego decirle a VBA que continúe, luego se ejecuta. Sin embargo, si elimino ese punto de interrupción y establezco un punto de interrupción en la línea:

sResponse = .responseText

luego se cuelga.

Entonces, parece que cuando se llama a esta función desde Access, se bloquea en el bucle a menos que un punto de interrupción le indique que haga una pausa antes de ingresar al bucle.

Intenté automatizar la pausa insertando una llamada a una función que pausa VBA por un tiempo aleatorio. Eso no impidió que la función se colgara.

Resumen:

  • La función funcionó en el pasado en Excel.
  • Funciona en Access si está pausado por un punto de interrupción al comienzo del ciclo.
  • Se bloquea si se llama en Access sin ese punto de interrupción.

¿Qué podría estar causando que esta función se cuelgue en Access y qué podría cambiar para que funcione?

información relacionada