Saltar al contenido

Haga que el código VBA se detenga o disminuya la velocidad (usando los comandos de suspensión/espera)

Make VBA Code Pause or Delay Using Sleep Wait Commands Haga que el código VBA se detenga o disminuya la velocidad (usando los comandos de suspensión/espera)
Haga que VBA pause el código con suspensión y espere

Al trabajar con un código VBA, a veces es posible que desee pausar la ejecución del código o retrasar la ejecución del código durante unos segundos o especificar un tiempo específico.

Por ejemplo, si uso mi código VBA para abrir un archivo .exe u otro archivo de formato (como Word o PowerPoint), y quiero un retraso en mi código para poder ver que el archivo se abrió correctamente.

Esto se puede hacer fácilmente usando los comandos integrados SLEEP y WAIT en Excel VBA.

Veamos algunos ejemplos que puede usar para suspender o pausar su código VB en Excel.

Usar el comando VBA WAIT para suspender o pausar el código

Con el método WAIT en Excel VBA, puede detener la ejecución del código durante una cantidad específica de segundos, minutos y horas, todo hasta la hora especificada (por ejemplo, 3:00 p. m. o 9:00 a. m.).

A continuación se muestra el código VBA que usaría el comando de espera para retrasar la ejecución del código en 5 segundos y luego muestra el cuadro de mensaje que dice «Vamos».

Sub Wait5Sec()
If Application.Wait(Now + TimeValue("00:00:05")) Then
 MsgBox "Let's Go"
End If
End Sub

He usado el método Application.Wait dentro de un IF Then condicional, que no nos mostrará el cuadro de mensaje hasta que termine el tiempo de espera.

Cuadro de mensaje después de que el código se retrase

Tenga en cuenta que el método Application.Wait necesita una entrada de tiempo para que sepa cuánto esperar antes de pasar a la siguiente línea de código.

En este código de muestra, he usado Now + TimeValue («00:00:05»), donde Now es el momento en que se ejecuta el código (que se recupera automáticamente de la configuración de su sistema), luego se le agrega un retraso de 5 segundos. .

Precaución: cuando usa el comando WAIT en VBA mientras el retraso está en curso, no puede hacer nada en su archivo de Excel. Sería como si su Excel estuviera atascado y no se liberará hasta que termine el tiempo de espera.

A continuación se muestra cómo cambia mi cursor cuando se ejecuta el código y no puedo seleccionar nada en la hoja de trabajo.

Excel se bloquea cuando se ejecuta el código

También puede usar el método WAIT para retrasar la ejecución de su código hasta un momento específico.

Por ejemplo, a continuación se muestra el código VB que mantendrá la ejecución del código hasta que en su sistema sean las 11:30 a.m.

Sub WaitTill11AM()
If Application.Wait "11:30:0" Then
 MsgBox "It's Time"
End If
End Sub

Le recomiendo encarecidamente que haga una copia de seguridad cuando trabaje con el comando Esperar o Suspender en Excel VBA.

Uso del comando VBA SLEEP para retrasar o pausar el código

Otra forma de pausar un retraso de código VBA es usar el comando SLEEP.

Sleep es una función de Windows y no un método de VBA.

Por lo tanto, si desea utilizar el método SLEEP en su código, primero debe hacer referencia a la DLL de Windows con el comando SLEEP para que podamos usarlo en nuestro código VBA.

Esto es bastante simple. Todo lo que necesita hacer es agregar una línea de código estándar sobre su código VBA real que desea ejecutar (vea el código a continuación, puede copiarlo de mi código)

A continuación se muestra el código VBA que usaría el comando de suspensión para pausar el código durante 10 segundos

#If VBA7 Then

'For 64-Bit MS Office
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else
'For 32-Bit MS Office
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long) 
#End If

Sub Sleep10Sec()
     Sleep (5000)
     MsgBox "It's Time"
     'Your Code can go here
End Sub

En el código anterior, las primeras siete líneas #Si VBA7….#Terminar si es la declaración que hace referencia al archivo DLL kernel32 de Windows.

Solo después de hacer esta declaración, la función SLEEP se puede usar en nuestro código VBA (de lo contrario, no funcionará)

A diferencia de la función WAIT, en la que debe especificar el valor de tiempo hasta que desea que se retrase el código, la función SLEEP toma el valor de retraso en milisegundos. En nuestro código utilicé Sleep(5000), esto detendría mi código durante 5 segundos.

Si desea pausar su código por un segundo, puede usar Sleep (5000).

Al igual que con la función WAIT, cuando pausa el código con la función SLEEP, Excel se congela y no puede hacer nada mientras continúa la demora.

Los comandos ESPERAR y DORMIR en Excel pueden tener una variación de algunos milisegundos en el retraso. Entonces, si desea reducir la velocidad de su código VBA en 1 segundo, podría ser un poco más o menos (podría estar desactivado por unos pocos milisegundos). Esto no ha sido un problema en los proyectos con los que he trabajado.

En este tutorial, le mostré cómo pausar o ralentizar su código VBA en Excel usando los comandos ESPERAR o DORMIR.

Con el comando WAIT, debe especificar el tiempo hasta el que desea retrasar la ejecución del código, y con SLEEP, debe especificar el período de tiempo durante el cual desea pausar la ejecución del código.

Otros artículos de Excel que también te pueden gustar: