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