xltoday.net

EXCEL 2007 TABLAS Y GRAFICOS


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