Die VBA-Funktionen Wait & Sleep – VBA-Code pausieren/verzögern

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on Dezember 20, 2022

In diesem Tutorial zeigen wir Ihnen, wie Sie mit den Funktionen Wait und Sleep den Code in VBA pausieren/verzögern können.

Wenn wir große VBA-Programme erstellen, die viele Berechnungen durchführen, oder vielleicht sogar ein externes Programm aufrufen, kann es erforderlich sein, dass unser VBA-Code für eine bestimmte Zeitspanne angehalten wird, während der externe Prozess abläuft. VBA verfügt über einige Methoden, um dies zu erreichen.

Die Methode Application.Wait verwenden

Wenn wir die Ausführung unseres Makros für eine gewisse Zeit oder bis zum Erreichen einer bestimmten Zeit unterbrechen müssen, bevor wir den nächsten Schritt ausführen, können wir die Methode Application.Wait verwenden. Dies kann z. B. nützlich sein, wenn wir einen Anmeldevorgang für eine Website automatisiert haben und einige Sekunden warten müssen, bis die Seite geladen ist, bevor unser Makro weiterläuft.

1 Sekunde warten

Wenn Sie diese Zeile in Ihr Makro einfügen, wird dessen Ausführung für etwa 1 Sekunde unterbrochen:

Application.Wait (Now + TimeValue("0:00:01"))

Warten bis

In manchen Fällen müssen Sie bis zu einer bestimmten Uhrzeit warten. Mit dieser Zeile unten wird Ihr Makro nicht vor 9 Uhr morgens ausgeführt:

Application.Wait "09:00:00"

Bitte beachten Sie, dass Application.Wait keine Verzögerungen von weniger als 1 Sekunde akzeptiert.

Die Sleep-Methode verwenden

Wenn Sie eine präzisere Methode zum Anhalten Ihres Makros benötigen, können Sie die Sleep-Methode verwenden.

Sleep ist eine Windows-API-Funktion, d. h. sie ist nicht Teil von VBA. Sie kann über eine spezielle Deklarationsanweisung aufgerufen werden.

Wenn Sie die 64-Bit-Version von Microsoft Office verwenden, können Sie die folgende Anweisung in ein neues Modul oder am Anfang des Moduls (nicht direkt in die Unterprozedur) einfügen, in dem Sie die Sleep-Funktion verwenden möchten:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Bei der 32-Bit-Version verwenden Sie diese Zeile:

Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Nachdem Sie die Sleep-Funktion deklariert haben, können Sie in Ihren Unterprozeduren wie folgt darauf zugreifen:

Sleep 10000

Mit dieser Zeile wird Ihr Makro für 10.000 Millisekunden, d.h. 10 Sekunden, pausiert.

Eine Schleife mit DoEvents verwenden

Der große Nachteil der Wait- und Sleep-Methoden besteht darin, dass der Benutzer nichts in Excel tun kann, während er auf die Fortsetzung des Makros wartet. Der Benutzer könnte denken, dass Excel nicht mehr reagiert und er kann dann zwar mit Strg+Break das Makro unterbrechen, aber das verfehlt den Zweck, eine Pause in das Makro einzulegen, mit dem begonnen werden soll.

Um dieses Problem zu lösen, können wir eine Schleife mit einer Methode namens DoEvents verwenden.

Public Sub Test()
    Dim i As Long
    For i = 1 To 20000
        Range("A1").Value = i
        DoEvents
    Next i
End Sub

Während Excel das obige Makro ausführt, kann der Benutzer weiterhin mit dem System interagieren. Wir können z. B. Registerkarten ändern oder Zellen formatieren. Wir könnten eine ähnliche Schleife verwenden, um eine Timer-Funktion in Excel zu erstellen und die DoEvents-Methode darin einzubinden, um den Bildschirm freizugeben, während der Timer ausgeführt wird.

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples