Curso Excel VBA y Macros – Cap. 41 – OnTime para agendar macros y procedimientos
En este video tutorial seguiremos con el tema de eventos en Excel. Ya vimos que los eventos son acciones que les suceden a los objetos de Libro (Workbook) u Hoja (Worksheet), como son: al abrir un archivo, al cerrar un archivo, al seleccionar celdas, al modificar celdas, etc.
En este capitulo veremos uno de los dos eventos que no están asociados a ningún objeto, como es el evento OnTime. El otro es el evento OnKey. Estos dos eventos también se consideran Métodos.
El evento OnTime nos permitirá agendar la ejecución de una macro o procedimiento a cierta hora o cada cierto tiempo.
Este es el cuarto video tutorial de una serie de videos relacionados con los eventos:
-
Eventos de Libro (Workbook).
-
Eventos de Hoja (Worksheet).
-
Eventos de Formulario (UserForm).
-
Eventos no asociados a objetos.
-
OnTime.
-
OnKey.
-
-
Eventos de Aplicación (Application).
Ver video Capítulo 41 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Evento OnTime para agendar macros
Al poder agendar macros, tenemos las posibilidad de que se ejecute un procedimiento a cierta sin necesidad de nuestra intervención, como por ejemplo Realizar una consulta a cierta hora y enviar por mail un reporte
-
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.
Sintaxis
En la siguiente línea vemos cómo podemos usar el evento ó método OnTime.
Application.Ontime (EarliestTime, procedure, LatestTime, Schedule)
Donde:
ARGUMENTO |
DESCRIPCIÓ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. |
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.
Sub ValorCelda() Range("B3").Value = Range("B3").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 AgendarMacroEn5() Application.OnTime EarliestTime:=Now + TimeValue("00:00:05"), Procedure:="ValorCelda" End Sub
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("B4").Value = Range("B4").Value + 1 Tiempo = VBA.DateAdd("s", 1, Time) Application.OnTime EarliestTime:=Tiempo, Procedure:="AgendarMacroCada" If Range("B4").Value = 10 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", 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("22:43: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
Descarga el archivo de ejemplo
041 – Evento OnTime para agendar macros y procedimientos.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.