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.
- StartTemporizador - Iniciar el temporizador
- Tu_Sub - Cualquier instrucción
- 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 Const conIntervalo = 60 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.
Iniciar temporizador
La primera macro inicia el temporizador.
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.
MsgBox datHora 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub
Cerrar temporizador
El temporizador hay que cerrarlo 'manualmente'.
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 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


