Ejecutar una macro en Excel a una hora determinada o cada cierto tiempo con OnTime VBA

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

En 5 segundos se ejecutrá la macro ValorCelda.

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

Descargar el 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.

You may also like...