VBA – Funciones Wait & Sleep – Pausa / Demora de Código VBA
In this Article
Este tutorial demostrará cómo pausar / demorar código utilizando las funciones Wait y Sleep en VBA.
Cuando creamos grandes programas VBA que realizan muchos cálculos, o tal vez incluso llaman a un programa externo para que se ejecute, podemos requerir que nuestro código VBA deje de ejecutarse por un período de tiempo específico mientras el proceso externo se lleva a cabo. VBA tiene algunos métodos disponibles para lograr esto.
Uso del Método Application.Wait
Si necesitamos pausar la ejecución de nuestra macro durante algún tiempo o hasta que se haya alcanzado un tiempo especificado antes de ejecutar el siguiente paso, podemos utilizar el método Application.Wait. Esto puede ser útil, por ejemplo, si hemos automatizado un proceso de login en una web y necesitamos esperar unos segundos hasta que se cargue la página antes de que nuestra macro siga ejecutándose.
Esperar 1 Segundo
Incluyendo esta línea de abajo en tu macro, su ejecución se pausará durante aproximadamente 1 segundo:
Application.Wait (Now + TimeValue("0:00:01"))
Esperar Hasta
En algunos casos necesitará esperar hasta una hora específica. Con esta línea de abajo su macro no procederá antes de las 9 am:
Application.Wait "09:00:00"
Tenga en cuenta que Application.Wait no acepta retrasos inferiores a 1 segundo.
Uso del Método de Sleep
Si necesita una forma más precisa de pausar su macro, puede utilizar el método Sleep.
Sleep es una función de la API de Windows, es decir, no forma parte de VBA. Se puede acceder a ella utilizando una declaración especial.
Si utiliza la versión de 64 bits de Microsoft Office, puede insertar la siguiente declaración en un módulo nuevo o al principio del módulo (no directamente en la subrutina) en el que desee utilizar la función Sleep:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Con la versión de 32 bits utilice esta línea:
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Después de declarar la función Sleep, tienes acceso a ella en tus subrutinas así:
Sleep 10000
Con esta línea de arriba tu macro estará en pausa por 10,000 milisegundos, es decir, 10 segundos.
Usando un Bucle(Loop) con DoEvents
La gran desventaja de usar los métodos Wait y Sleep es que el usuario no puede hacer nada en Excel mientras espera que la macro continúe. Un usuario podría pensar que Excel ha dejado de responder y mientras el usuario puede usar Ctl+Break para interrumpir la macro, esto anula el propósito de poner una pausa en la macro para empezar. Para superar este problema, podemos utilizar un bucle con un método llamado DoEvents.
Public Sub Test()
Dim i As Long
For i = 1 To 20000
Range("A1").Value = i
DoEvents
Next i
End Sub
Ahora, mientras Excel está ejecutando la macro anterior, el usuario puede continuar interactuando con Excel – podemos cambiar tabulaciones o formatear celdas por ejemplo – básicamente, la macro continúa ejecutándose pero la pantalla de Excel no está congelada. Podríamos utilizar un bucle similar para crear una función de temporizador en Excel e incorporar el método DoEvents en ella para descongelar la pantalla mientras el temporizador se está ejecutando.