Start » VBA-Ejemplos » El temporizador de Excel VBA

El temporizador de Excel VBA

Si queremos que una instrucción se haga automáticamente, a intervalos fijos, podemos recurrir al método Application.OnTime.

Procedimientos

Vamos a necesitar tres sencillas macros.

  1. StartTemporizador - Iniciar el temporizador
  2. Tu_Sub - Cualquier instrucción
  3. StopTemporizador - Cerrar el temporizador

Luego hacen falta dos botones en la hoja, uno para la macro StartTemporizador, y otro para la StopTemporizador.

Declaraciones

Por encima de las macros descritas abajo, hacemos las declaraciones.

Public datHora As Date
Public Const conIntervalo = 60 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.

Iniciar temporizador

La primera macro inicia el temporizador.

Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub

Tu procedimiento

Aquí pones lo que quieres que Excel haga periodicamente.

Sub Tu_Sub()
MsgBox datHora 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub

Cerrar temporizador

El temporizador hay que cerrarlo 'manualmente'.

Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub

Todo el código

Ahora, el módulo de las macros descritas arriba debe tener el siguiente aspecto.

Public datHora As Date
Public Const conIntervalo = 60 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.

Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub

Sub Tu_Sub()
MsgBox datHora 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub

Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub