Frage

Wie ausführen ein paar VBA-Code in regelmäßigen Abständen, vollständig automatisiert?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top