Función de suspensión VBA

Función de suspensión de Excel VBA

La función de suspensión de VBA es una función de Windows presente en los archivos DLL de Windows que se utiliza para detener o pausar la ejecución del procedimiento de macro durante un período de tiempo específico después de esa cantidad de tiempo podemos reanudar el programa.

Hay situaciones en las que necesitamos pausar nuestro proceso de ejecución de macros para completar otros conjuntos de tareas. Otros conjuntos de tareas podrían ser parte de nuestra codificación o parte de otro procedimiento de macro o podría ser una entrada para la macro de Excel actual. ¿Cómo puede pausar el programa cuando se está ejecutando? Podemos pausar el código de procedimiento durante un tiempo especificado por el usuario y luego de esa cantidad de podemos reanudar el programa. Podemos hacer esto en VBA usando la función SLEEP.

¿Qué hace la función de suspensión de VBA?

DORMIR como el propio nombre dice "dormir por un tiempo", "descansar por un tiempo", "pausa por un tiempo", tiempo libre por un tiempo ", etc. La función de suspensión permite a los usuarios pausar nuestro código macro durante milisegundos. Usando esto podemos retrasar el proceso de código macro.

Si cree que tenemos una función incorporada llamada SLEEP, entonces está equivocado porque en VBA no existe tal función, sino que tenemos una función llamada Sleep como función de Windows. Al ingresar un conjunto especial de código, podemos llamar a esta función en VBA. De hecho, es una función presente dentro de los archivos DLL de Windows, por lo que necesitamos declarar la nomenclatura de la API antes del inicio de la subrutina en vba.

A continuación se muestra el código VBA.

Código:

# If VBA7 Then Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Para versiones de 64 bits de Excel # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Para versiones de 32 bits de Excel # End If 

Copie lo anterior y péguelo en su módulo antes de comenzar a escribir los códigos de macro. Debería pegarse así en su módulo.

Ejemplo

Antes de mostrarte la forma de escribir el código, déjame contarte un poco más sobre la función de suspensión. Retrasa el proceso en milisegundos. Entonces, 1 segundo es igual a 1000 milisegundos, si desea hacer una pausa de 10 segundos, debería ser 10000 milisegundos.

Puede descargar esta plantilla de Excel de sueño de VBA aquí - Plantilla de Excel de sueño de VBA

Ejemplo 1

Una vez que el código API pegado antes del inicio del procedimiento Sub, cree un nombre de macro.

Código:

# Sub Sleep_Example1 () End Sub 

Declare dos variables como una cadena.

Código:

 Dim StartTime como cadena Dim EndTime como cadena 

Para la variable StartTime , asigne el valor de la función TIME. Nota: HORA en la función de Excel devuelve la hora actual.

Código:

StartTime = Hora

Ahora mostraremos este mensaje en el cuadro de mensaje VBA.

Código:

StartTime = Hora MsgBox StartTime

Ahora pausaremos el código durante 10 segundos usando la función de suspensión. Como dije, pausa el código en milisegundos, por lo que para hacer una pausa de 10 segundos, necesitamos usar 10000 milisegundos.

Código:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub 

Ahora use la segunda variable EndTime y asigne la hora actual.

Código:

 Sub Sleep_Example1 () Dim StartTime como cadena Dim EndTime como cadena StartTime = Hora MsgBox StartTime Sleep (10000) EndTime = Hora MsgBox EndTime End Sub 

Ahora, dos variables StartTime y EndTime contendrán la hora de inicio y la hora de finalización de la macro. Ejecute esta macro, al principio veremos la hora de inicio de la macro, es decir, la hora actual en su sistema.

Haga clic en Aceptar, dormirá durante 10 segundos. Puede ver el símbolo del búfer.

Después de 10 segundos, comenzará a reanudar el código, por lo que mostrará la hora de finalización, es decir, después de esperar 10 segundos, cuál es la hora actual.

Ahora puede ver que la macro comenzó a las 10:54:14 y terminó a las 10:54:24, es decir, exactamente la diferencia de 10 segundos está ahí. En esos 10 segundos, VBA pausa la ejecución del código.

Ejemplo n. ° 2: función de suspensión en bucles

El sueño se usa mejor con bucles en VBA. Por ejemplo, quiero insertar números de serie del 1 al 10 usando Do while loop en VBA.

Después de insertar el número único, mi código debe esperar 3 segundos, por lo que cuando el ciclo se ejecuta 10 veces, debe ser de 30 segundos en total.

Código:

 Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milisegundos es 1 segundo, por lo que 3000 es igual a 3 segundos Loop End Sub 

Ejecute este código y tendrá que esperar un mínimo de 30 segundos para completar el proceso.

Para rastrear la hora exacta use el siguiente código.

Código:

 Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Su código comenzó en" & StartTime k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milisegundos es 1 segundo, por lo que 3000 es igual a 3 segundos Loop EndTime = Time MsgBox "Your Code Terminded at" & EndTime End Sub 

Este código le mostrará 2 cuadros de mensaje, el primero mostrará la hora de inicio y el segundo mostrará la hora de finalización.

Nota: Mientras ejecuta este código, no puede usar Excel, incluso la tecla de escape no funcionará.