Вы можете использовать Application.OnTime, чтобы запланировать выполнение макроса периодически. Например, создайте модуль с кодом ниже. Вызовите «Включить», чтобы запустить таймер.
Важно остановить работу таймера при закрытии книги: для этого обработайте Workbook_BeforeClose и вызовите «Отключить»
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
В качестве альтернативы вы можете использовать функции Win32 API SetTimer / KillTimer аналогичным образом.