2009-01-22 41 views

Respuesta

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

Utilice la siguiente sintaxis para llamar a la función del sueño:

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

Ahh acaba de encontrar que yo mismo. ¡Gracias! –

+1

Debo señalar que en Excel 2007, puedo llamar a Sleep directamente sin el envoltorio VBA sub. –

+1

La declaración Declare debe estar en un módulo para evitar el error "Declarar declaraciones no permitidas como miembros públicos del objeto". – HuckIt

6

Se requiere un par de modificaciones para obtener el código para trabajar. El código siguiente 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 
8

Otra forma sin usar kernel32:

Dim started As Single: started = Timer 

Do: DoEvents: Loop Until Timer - started >= 1 
1

Adición

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

problemas adicionales creados alguna manera en otro lugar en mi código. Terminé usando esta función que he encontrado en otro foro y tweeked 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 

esperanza de que esto ayude :)

+1

La única razón por la que puedo pensar que agregar el encabezado de función causaría "problemas" es si ya estaba usando el nombre de la función "Suspensión" en un módulo o clase en el proceso actual. –

2

Yo uso esta en Excel y funciona muy bien:

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. Entonces aquí, la llamada de función está diciendo a la aplicación licación esperar 1 segundo.

See also for more detail about the use of the DateAdd function.

+0

Esto no funciona en Access as-is – MAW74656

+0

@ MAW74656 Bastante justo; Dije en Excel, y no lo he probado en Access. Usted dice 'tal como está', ¿sabe de una solución alternativa? – Gaffi

+0

@ Gaffi- No, no tengo idea de cómo solucionarlo. – MAW74656

5

Todo el resto de los métodos para hacer que Excel esperar el resultado en Excel convertirse totalmente insensible. 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 
+0

El problema con el uso de este método es que DoEvents termina usando casi todo el tiempo de la CPU. – phrebh

2

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

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

Cuando eso se hace el siguiente código trabajará para esperar durante diez segundos:

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

Si utiliza 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 declarar como privada:

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

Cuestiones relacionadas