Hola en ADO, hay un parametro para los Open de las conexiones o Recordset. que se llama adAsyncExecute, no se si investigaste por ese lado.
Alguna vez jugue con eso, y cuando llamas al Open o Execute, inmediatamente sigue la ejecucion del programa, sin bloquearlo
Te paso un ejemplo del Help de Ado que supongo que puede servirte
Ejemplo de la propiedad State
Este ejemplo utiliza la propiedad State para mostrar un mensaje al mismo tiempo que se abren conexiones asíncronas y se ejecutan comandos asíncronos.
Public Sub StateX()
Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cmdChange As ADODB.Command
Dim cmdRestore As ADODB.Command
Dim strCnn As String
'Abre dos conexiones asíncronas que muestran
'un mensaje mientras se conectan.
Set cnn1 = New ADODB.Connection
Set cnn2 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn, , , adAsyncConnect
While (cnn1.State = adStateConnecting)
Debug.Print "Abriendo la primera conexión..."
Wend
cnn2.Open strCnn, , , adAsyncConnect
While (cnn2.State = adStateConnecting)
Debug.Print "Abriendo la segunda conexión..."
Wend
'Crea dos objetos Command.
Set cmdChange = New ADODB.Command
cmdChange.ActiveConnection = cnn1
cmdChange.CommandText = "UPDATE títulos SET tipo = 'auto_ayuda' " & _
"WHERE tipo = 'psicología'"
Set cmdRestore = New ADODB.Command
cmdRestore.ActiveConnection = cnn2
cmdRestore.CommandText = "UPDATE títulos SET tipo = 'psicología' " & _
"WHERE tipo = 'auto_ayuda'"
'Ejecuta los comandos y muestra un mensaje al mismo tiempo.
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Cambiando el comando en ejecución..."
Wend
cmdRestore.Execute , , adAsyncExecute
While (cmdRestore.State = adStateExecuting)
Debug.Print "Restaurando el comando en ejecución..."
Wend
cnn1.Close
cnn2.Close
End Sub