2010-04-29 19 views
11

Sé que estoy haciendo algo mal aquí. Intento utilizar la función dormir para retrasar mi código, pero aparece el error "Sub o función no definida". ¿Algun consejo?VBA Sleep no funciona

Respuesta

17

VBA no tiene una función Sleep.

Puede importar desde Kernel32.dll así:

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

Tenga en cuenta que este se congelará la aplicación.
También puede llamar al DoEvents en un bucle While, que no congelará la aplicación.

+0

Cuando en el código puedo poner esa declaración? Intenté colocarlo dentro y fuera del sub en el que estoy trabajando, pero obtuve los errores en ambas ocasiones. – sooprise

+0

¿Qué error? Intenta ponerlo en un Módulo. – SLaks

+0

Oh, uy, estaba tratando de ponerlo en un objeto de Excel (tonto). Lo puse en un módulo y ahora funciona. ¡Muchas gracias! Revisé tu respuesta. – sooprise

7

También puede pausar el contexto de macro actual con Application.Wait T que no bloqueará todo el proceso.

4

Todo lo que he intentado parece colgar la aplicación, incluido Application.Wait. Esto parece funcionar sin embargo:

waitTill = Now() + TimeValue("00:15:00") 

While Now() < waitTill 
    DoEvents 
Wend 
+0

Me gusta este y está funcionando muy bien ... solo una excepción. No puedo encontrar una manera de hacer 500 ms ... Entonces 1 segundo es el tiempo mínimo de espera. ¿Hay alguna manera de hacer menos de 1 segundo? – BobNoobGuy

+0

Puede usar GetSystemTime en kernel32.dll si desea mayor resolución: http://www.freevbcode.com/ShowCode.asp?ID=1618 O si está en Excel, puede llamar a la función de hoja de cálculo now() (como [ahora()] de VBA) que también tiene una resolución más alta: https://groups.google.com/forum/#!topic/microsoft.public.excel.programming/-D6lkjJv2ew –

2
Application.Wait DateAdd("m", 10, Now) ' Wait for 10 Minutes 
Application.Wait DateAdd("s", 10, Now) ' wait for 10 seconds 
+2

¡Bienvenido a Stack Overflow! ¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion). También tenga en cuenta que * se requiere * que publique un descargo de responsabilidad cada vez que se vincula a su propio sitio/producto. –

+0

@AndrewBarber: mirando el enlace, no se parece al sitio de Babu, sino más bien como una lectura útil para el SO. ¿Por qué querrías eliminarlo? –

+0

@PeterAlbert Es el sitio de Babu. Lo han estado enviando mucho últimamente (muchas de sus respuestas fueron eliminadas como spam porque ni siquiera contenían tanta información), y está en su perfil aquí. –