thread sub pausar macro funcion vba access-vba sleep

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



vba wait milliseconds (8)

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 :)

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


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()))


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 .


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


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

Si es así, puede declararlo como privado:

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


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


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

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

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