Wie ein Makro zu machen, die in regelmäßigen Abständen in Excel ausführt?
Frage
Wie ausführen ein paar VBA-Code in regelmäßigen Abständen, vollständig automatisiert?
Lösung
Sie können Application.OnTime verwenden, um einen Makro zu planen periodisch ausgeführt werden. Zum Beispiel ein Modul mit dem folgenden Code erstellen. Rufen Sie „Aktivieren“, um den Timer läuft zu starten.
Es ist wichtig, die Zeit läuft zu stoppen, wenn Sie Ihre Arbeitsmappe schließen: zu tun, so Workbook_BeforeClose handhaben und rufen „Deaktivieren“
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
Alternativ können Sie die Win32-API SetTimer / Killtimer-Funktionen in ähnlicher Weise.
Andere Tipps
Es ist ein Anwendungsverfahren, die für die Zeitereignisse verwendet werden können. Wenn Sie dies erfolgen soll in regelmäßigen Abständen werden Sie müssen ‚Reload‘ der Timer nach jeder Ausführung, aber das sollte ziemlich einfach sein.
Sub MyTimer()
Application.Wait Now + TimeValue("00:00:05")
MsgBox ("5 seconds")
End Sub
-Adam
Sie können den Windows Task Scheduler und VBScript betrachten.
Ich tue dies die ganze Zeit, ich verwendet, um die „OnTime“ Methode zu verwenden, wie oben gezeigt, aber es macht die Maschine, die Sie für nutzlose den Code ausgeführt wird für andere Dinge, weil Excel 100% der Zeit ausgeführt wird. Stattdessen verwende ich eine versteckte Arbeitsmappe geändert und ich ausführen mit Windows-Taskplaner und in der Thisworkbook Workbook_Open Funktion des Makros aus Ihrer persönlichen Arbeitsmappe rufen, oder öffnen und eine andere Arbeitsmappe mit dem Code in ausführen. Nachdem der Code ausgeführt hat, kann man durch die Application.Quit Funktion von der verborgenen Arbeitsmappe und schließt ecxel für den nächsten Lauf nennen. Ich benutze das für alle meine auf 15 Minuten und täglich unbeaufsichtigt Reporting-Funktionen.