Chris entwickelt ein Excel-Makro, das dem Benutzer eine Reihe von Elementen anzeigt. Er möchte eine Verzögerung im Makro von beispielsweise einer Sekunde zwischen jeder angezeigten Information einführen, und er fragt sich, ob es eine einfache Möglichkeit gibt, eine solche Verzögerung hinzuzufügen.

Es gibt verschiedene Möglichkeiten, wie Sie eine Verzögerung in Ihr Makro einfügen können. Die traditionelle Methode ist die Verwendung der Wait-Methode, die für das Application-Objekt verwendet wird. Sie verwenden es, um eine Verzögerung von einer Sekunde auf folgende Weise einzuführen:

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

Beachten Sie, dass der für die Wait-Methode erforderliche Parameter der Zeitpunkt ist, zu dem Ihr Makro wieder ausgeführt werden soll. Mit anderen Worten, es ist die Wartezeit. Aus diesem Grund wird im obigen Beispiel die aktuelle Zeit (aus der Now-Funktion) verwendet, die um eine einzelne Sekunde erhöht wird.

Wenn Sie die Wait-Methode (aus welchem ​​Grund auch immer) nicht verwenden möchten, können Sie auch einfach eine Schleife verwenden, um Ihre Zeit zu verkürzen:

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

Eine Variante dieses Ansatzes basiert auf der Timer-Funktion, die die Anzahl der Sekunden seit Mitternacht zurückgibt:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

Wenn Sie eine Schleife auf diese Weise verwenden, ist es wahrscheinlich kein großes Problem, wenn Sie nur eine Sekunde verzögern. Wenn Sie länger warten müssen, möchten Sie wahrscheinlich die DoEvents-Funktion in die Schleife einfügen:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

Der Grund ist einfach: Wenn Sie dies nicht tun, reagiert Excel in der Schleife nicht auf andere Ereignisse. Dies kann den Eindruck erwecken, dass Ihr System während des Wartens eingefroren oder hängen geblieben ist.

Wenn Sie mehr Verzögerungen bei Ihren Verzögerungen benötigen (bis auf den Millisekundenbereich), können Sie sich auf die Sleep-Funktion verlassen, die Teil der Windows-API ist. (Es ist kein Teil von VBA.) Um es verwenden zu können, müssen Sie vor allen Verfahren eine Deklaration am Anfang Ihres Moduls in den Deklarationsbereich einfügen:

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

Dann können Sie in Ihrem Makro die Sleep-Funktion folgendermaßen verwenden:

Sleep(1000)

Dadurch wird das System für 1000 Millisekunden angehalten, was 1 Sekunde entspricht.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (5134) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.