http://www.outlookcode.com/threads.aspx?forumid=2&messageid=7964
Coloque el código siguiente en el módulo ThisOutlookSession (Herramientas-> Macros-> VB Editor):
Private Sub Application_Quit()
If TimerID <> 0 Then Call DeactivateTimer 'Turn off timer upon quitting **VERY IMPORTANT**
End Sub
Private Sub Application_Startup()
MsgBox "Activating the Timer."
Call ActivateTimer(1) 'Set timer to go off every 1 minute
End Sub
Coloque el código siguiente en un nuevo módulo de VBA
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public TimerID As Long 'Need a timer ID to eventually turn off the timer. If the timer ID <> 0 then the timer is running
Public Sub ActivateTimer(ByVal nMinutes As Long)
nMinutes = nMinutes * 1000 * 60 'The SetTimer call accepts milliseconds, so convert to minutes
If TimerID <> 0 Then Call DeactivateTimer 'Check to see if timer is running before call to SetTimer
TimerID = SetTimer(0, 0, nMinutes, AddressOf TriggerTimer)
If TimerID = 0 Then
MsgBox "The timer failed to activate."
End If
End Sub
Public Sub DeactivateTimer()
Dim lSuccess As Long
lSuccess = KillTimer(0, TimerID)
If lSuccess = 0 Then
MsgBox "The timer failed to deactivate."
Else
TimerID = 0
End If
End Sub
Public Sub TriggerTimer(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)
MsgBox "The TriggerTimer function has been automatically called!"
End Sub
Puntos clave:
1) Esta función del temporizador no no requiere que una ventana en particular esté abierta; funciona en segundo plano
2) Si no se desactiva el temporizador cuando se cierra la aplicación es probable que bloquee
3) El ejemplo muestra que el temporizador está activado en el arranque, pero apenas puede ser tan fácil llamado por un evento diferente
4) Si no ve el MsgBox lo que indica que el temporizador se activa al inicio, su seguridad de macros está establecido demasiado alto
5) Para que la desactivación del temporizador después de una iteración agregue el intervalo de tiempo: Si TimerID <> 0 Luego, llame DeactivateTimer after msgbox declaración en sub TriggerTimer
Alguien sugirió
"Un punto a destacar, si no se comprueba si TimerID es la misma que en el idevent TriggerTimer, se obtiene de vez en cuando, y no a la vez que pidió para."
Public Sub TriggerTimer(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)
'keeps calling every X Minutes unless deactivated
If idevent = TimerID Then
MsgBox "The TriggerTimer function has been automatically called!"
End If
End Sub
Tome un vistazo a esto: –
Cuando se dispare el evento Recordatorio, ejecute el código, programe otro recordatorio de tarea 30 minutos después y luego cancele el evento. – JimmyPena
Escuché que es posible usar el evento Timer. ¿Alguien puede compartir el código para lograr esto usando un temporizador? – Tejas