VBA – Funciones Wait & Sleep – Pausa / Demora de Código VBA

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on diciembre 14, 2022

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.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples