Ejecutar una macro en Excel a una hora determinada o cada cierto tiempo con OnTime VBA
Photo by Sonja Langford on Unsplash
En este tutorial veremos la manera de programar o agendar la ejecución de macros a determinadas horas o cada cierto tiempo. Supongamos que compartes en red un archivo y si tus compañeros no cierran el archivo, éste se cierre automáticamente a cierta hora. Para ejecutar macros a futuro haremos uso del método OnTime en VBA.
Haciendo uso del método OnTime veremos 3 maneras de agendar la ejecución de macros:
-
Ejecutar una macro en n cantidad de tiempo, por ejemplo, ejecutarla en media hora.
-
Ejecutar una macro cada segundo, o el tiempo que definas.
-
Ejecutar una macro a cierta hora.
Cómo funciona el método OnTime
Como he explicado, el método OnTime nos ayudará a agendar o programar la ejecución de macros a una hora en específico o dentro de cierto tiempo. A continuación enlisto los parámetros de OnTime y su explicación.
-
EarliestTime. Es la hora en la que se ejecutará la macro.
-
Procedure. Es el nombre de la macro o procedimiento que se ejecutará.
-
LastestTime. Es el tiempo en que la macro se puede volver a ejecutar en caso de que Excel se encuentre ocupado a la hora programada. Por ejemplo si queremos que la macro se intente ejecutar en 30 segundos, en este parámetro pondríamos EarliestTime + 30. Sólo se hará un segundo intento.
-
Schedule. Si omitimos este parámetro por default será True, es decir, que ejecutará un procedimiento. Si le ponemos False anulará la ejecución de la macro o procedimiento.
Ver video Ejecutar macros a cierta hora
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Ejecutar una macro en 5 segundos
Primero debemos tener la macro a ejecutar, ya que será llamada con el método OnTime, que estará en otra macro.Tenemos una macro muy sencilla de ejemplo llamada ValorCelda. Esta macro aumenta en 1 el valor de la celda A8.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Dim Tiempo Sub ValorCelda() Range("A8").Value = Range("A8").Value + 1 End Sub
Y tenemos la macro llamada AgendarMacroEn, la cual, haciendo uso del método OnTime, le diremos que se ejecute la macro ValorCelda en 5 segundos.
Sub AgendarMacroEn() Application.OnTime EarliestTime:=Now + TimeValue("00:00:05"), Procedure:="ValorCelda" End Sub
Figura 1. En 5 segundos se ejecutará la macro ValorCelda.
Ejecutar una macro cada segundo
Puede que necesites ejecutar una macro cada cierto tiempo de la manera cíclica y que deje de ejecutarse cuando lo decidamos o cuando se cumpla alguna condición.
Tenemos la macro AgendarMacroCada la cual se ejecutara así misma cada segundo. Esta macro aumenta en 1 el valor de la celda A8. Si el valor de la celda A8 es igual a 20, entonces se dejará de ejecutar la macro.
Sub AgendarMacroCada() Range("A8").Value = Range("A8").Value + 1 Tiempo = DateAdd("s", 1, Time) Application.OnTime EarliestTime:=Tiempo, Procedure:="AgendarMacroCada" If Range("A8").Value = 20 Then Call CancelarMacro End Sub
También tenemos la macro CancelarMacro la cual nos servirá para detener la ejecución cíclica de la macro AgendarMacroCada. Para al macro de Cancelar usaremos el parámetro Schedule en False para anular la ejecución de la macro.
Sub CancelarMacro() Application.OnTime EarliestTime:=Tiempo, Procedure:="AgendarMacroCada", LatestTime:=0, Schedule:=False End Sub
Es importante definir la variable Tiempo como pública al inicio del módulo para que la podamos ejecutar desde AgendarMacroCada y desde CancelarMacro.
Dim Tiempo
Ejecutar una macro en determinada hora
Por último veremos cómo programar una macro a cierta hora. Por ejemplo, a las 9 de la noche cerraremos el archivo cuando se nos haya olvidado cerrarlo.
Sub CerrarArchivo() ThisWorkbook.Close SaveChanges:=True End Sub
En la macro AgendarMacroHora le indicaremos que la macro se ejecute a las 21:00, y ejecutará la macro CerrarArchivo.
Sub AgendarMacroHora() Application.OnTime TimeValue("21:10:00"), "CerrarArchivo" End Sub
Si deseas que todos los días a las 9 de la noche se intente cerrar el archivo, entonces debemos indicar que la macro AgendarMacroHora se ejecute cada que se abra el archivo. En el IDE de VBA entramos a ThisWorkbook y pegamos la siguiente macro.
Private Sub Workbook_Open() Application.OnTime TimeValue("21:00:00"), "CerrarArchivo" End Sub
Descargar el archivo de ejemplo
Ejecutar una macro en Excel a una hora determinada o cada cierto tiempo – EXCELeINFO.zip
Si te gustó este tutorial por favor anótate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.