Curso Excel VBA y Macros – Cap. 41 – OnTime para agendar macros y procedimientos

<<CURSO COMPLETO EN YOUTUBE>>

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

<<CURSO COMPLETO EN YOUTUBE>>

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.

También te podría gustar...