tiempo - ¿Cómo hacer una macro que se ejecuta periódicamente en Excel?
macro excel abrir archivo externo (4)
Existe un método de aplicación que se puede usar para cronometrar eventos. Si desea que esto ocurra periódicamente, tendrá que ''recargar'' el temporizador después de cada ejecución, pero eso debería ser bastante sencillo.
Sub MyTimer()
Application.Wait Now + TimeValue("00:00:05")
MsgBox ("5 seconds")
End Sub
-Adán
¿Cómo se puede ejecutar algún código de VBA periódicamente, completamente automatizado?
Hago esto todo el tiempo, solía usar el método "OnTime" como se muestra arriba pero hace que la máquina en la que está ejecutando el código sea inútil para otras cosas, porque Excel se ejecuta el 100% del tiempo. En su lugar utilizo un libro de trabajo oculto modificado y ejecuto con Windows Task Scheduler y en la función thisworkbook workbook_open, llamo a la macro de su libro de trabajo personal, o abro y ejecuto otro libro de trabajo con el código en él. Después de que se haya ejecutado el código, puede llamar a la función application.quit del libro de trabajo oculto y cerrar ecxel para la próxima ejecución. Lo uso para todas mis funciones de informes sin supervisión de 15 minutos y diarias.
Podría considerar el Programador de tareas de Windows y VBScript.
Puede usar Application.OnTime para programar una macro que se ejecutará periódicamente. Por ejemplo, crea un módulo con el siguiente código. Llame a "Habilitar" para iniciar el funcionamiento del temporizador.
Es importante detener el funcionamiento del temporizador al cerrar su libro de trabajo: para hacerlo, maneje Workbook_BeforeClose y llame a "Disable"
Option Explicit
Private m_dtNextTime As Date
Private m_dtInterval As Date
Public Sub Enable(Interval As Date)
Disable
m_dtInterval = Interval
StartTimer
End Sub
Private Sub StartTimer()
m_dtNextTime = Now + m_dtInterval
Application.OnTime m_dtNextTime, "MacroName"
End Sub
Public Sub MacroName()
On Error GoTo ErrHandler:
'' ... do your stuff here
'' Start timer again
StartTimer
Exit Sub
ErrHandler:
'' Handle errors, restart timer if desired
End Sub
Public Sub Disable()
On Error Resume Next '' Ignore errors
Dim dtZero As Date
If m_dtNextTime <> dtZero Then
'' Stop timer if it is running
Application.OnTime m_dtNextTime, "MacroName", , False
m_dtNextTime = dtZero
End If
m_dtInterval = dtZero
End Sub
Alternativamente, puede utilizar las funciones SetTimer / KillTimer de Win32 API de forma similar.