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



