¿Hay un equivalente a Thread.Sleep () en VBA?

¿Hay un equivalente a Thread.Sleep() en Access VBA?

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" _ (ByVal dwMilliseconds As Long) 

Use la siguiente syntax para llamar a la función Sleep:

 Sub Sleep() Sleep 1000 'Implements a 1 second delay End Sub 

Otra forma sin usar kernel32:

 Dim started As Single: started = Timer Do: DoEvents: Loop Until Timer - started >= 1 

Se requieren algunas enmiendas para que el código funcione. El código a continuación es la versión corregida.

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Sub SleepVBA() Sleep 1000 'Implements a 1 second delay End Sub 

Todos los demás métodos para hacer que Excel espere resultan en que Excel deja de responder por completo. La solución para hacer que Excel espere mientras se asegura una interfaz de usuario receptiva es llamar a este espera Sub con el número de segundos para esperar.

  Sub Wait(seconds As Integer) Dim now As Long now = Timer() Do DoEvents Loop While (Timer < now + seconds) End Sub 

Lo uso en Excel y funciona genial:

 Application.Wait DateAdd("s", 1, Now()) 

DateAdd () es una función que establece un tiempo, relativo a Now() (en este caso, puede usar otros valores como su argumento), "s" es la medida de tiempo (segundos en este caso), y el incremento es 1 Así que aquí, la llamada a la función indica a la aplicación que espere 1 segundo.

Consulte también para obtener más detalles sobre el uso de la función DateAdd .

Es posible utilizar el procedimiento Excel Wait () desde Access VBA.

El primer paso es garantizar que la biblioteca de Excel se referencia desde su proyecto.

Cuando se haya hecho esto, el siguiente código funcionará para esperar diez segundos:

 Call Excel.Application.Wait(Time:=DateAdd("s",10,Now())) 

Si usa Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) , puede obtener este error en un módulo de objeto.

enter image description here

Si es así, puede declararlo como privado:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Añadiendo

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) 

de alguna manera creó problemas adicionales en otro lugar en mi código. Terminé usando esta función que encontré en otro foro y retoqué un poco:

 Function WaitTime(n As Double) 'Function that wait an amount of time n in seconds TWait = Time TWait = DateAdd("s", n, TWait) Do Until TNow >= TWait TNow = Time Loop End Function 

espero que esto ayude 🙂