VBA DoEvents

Inhaltsverzeichnis

Die VBA DoEvents -Funktion hält ein laufendes Makro vorübergehend an und gibt Excel die Möglichkeit, Tastendrücke, Mausklicks und andere Betriebssystemmeldungen zu verarbeiten.

In Makros mit langer Ausführungszeit kann es so aussehen, als würde Excel hängen bleiben und nicht mehr reagieren, und das Makro kann möglicherweise nicht unterbrochen werden. Wenn DoEvents in Ihrem Code enthalten ist, können Benutzer sicher sein, dass das Makro noch ausgeführt wird, und können die Ausführung bei Bedarf weiterhin unterbrechen.

VBA-DoEvents-Beispiel

Betrachten Sie den folgenden Code:

1234567891011 Öffentlicher Teiltest()Dim ich so langFür i = 1 bis 20000Bereich("A1").Wert = iAls nächstesEnd Sub

Wenn Sie diesen Code ausprobieren, werden Sie feststellen, dass mit dem Excel-Fenster nicht interagiert werden kann. Da es den Prozessor jedoch nicht sehr beansprucht, kann das Makro trotzdem durch Drücken von ESC oder STRG+UNTBR unterbrochen werden.

Wenn in dieser Schleife jedoch viele komplexe und anspruchsvolle Funktionen ausgeführt würden, würde Excel länger brauchen, um ein Tastendruckereignis zu registrieren - bis zu mehreren Minuten oder möglicherweise gar nicht, insbesondere wenn der Computer gleichzeitig andere Programme ausführt.

Fügen Sie nun eine einzelne Zeile mit DoEvents unterhalb der Bereichszuweisung hinzu:

123 Bereich("A1").Wert = iDoEvents

Wenn Sie diesen Code erneut ausführen, werden Sie feststellen, dass Excel jetzt reaktionsfähig ist – es kann fokussiert und in den Vordergrund gebracht werden. DoEvents wird jedes Mal durch die Schleife aufgerufen, wodurch sichergestellt wird, dass das Makro immer ausgeführt wird, damit Excel alle an es gesendeten Nachrichten verarbeiten kann. Da dieses Makro schnell ausgeführt wird, sieht es fast so aus, als ob es im Hintergrund ausgeführt wird (obwohl dies nicht der Fall ist) - weitere Operationen innerhalb der Schleife würden diese Illusion schnell aufdecken.

DoEvents Gefahren

Aber schau noch mal rein. Sie können Excel nicht nur fokussieren, sondern können auch innerhalb von Zellen herumklicken und sogar zwischen Registerkarten wechseln, während das Makro ausgeführt wird (versuchen Sie es - Sie werden ein lustiges Verhalten sehen). Dies zeigt eine der Gefahren von DoEvents - es kann unbeabsichtigte Folgen haben, wenn Ihr Makro nicht sorgfältig codiert ist.

Eine weitere Gefahr besteht darin, dass DoEvents als Fenster für andere Makros dienen können, in denen sie ausgeführt werden können. Versuchen Sie Folgendes: Platzieren Sie eine ActiveX-Befehlsschaltfläche auf dem Arbeitsblatt, doppelklicken Sie darauf und fügen Sie den folgenden Code in das CommandButton1_Click()-Ereignis ein:

1234567 Dim c als BereichFür jedes c im Bereich("B3:E8")c.Wert = c.Wert + 1Nächstes c

Schalten Sie den Entwurfsmodus in Excel aus und führen Sie dann das zuvor hinzugefügte Test()-Makro aus. Während das Testmakro ausgeführt wird, können Sie auf die Befehlsschaltfläche auf dem Arbeitsblatt klicken und sein zugeordnetes Makro wird ausgeführt, sobald DoEvents dem Test()-Makro eine Unterbrechung gibt.

Hier besteht die Gefahr, wenn das CommandButton-Makro die Daten änderte, an denen das Test()-Makro arbeitete, oder das Test()-Makro erneut auslöste. Wenn Sie nicht aufpassen, können Sie am Ende einige extrem unordentliche Ergebnisse erhalten.

Schließlich sollten Sie sich bewusst sein, dass DoEvents dazu führt, dass Ihr Makro beim Aufrufen Leistungseinbußen erleidet. Innerhalb einer Schleife summieren sich diese Auswirkungen schnell, es sei denn, Sie begrenzen, wie oft DoEvents aufgerufen wird. Versuchen Sie Folgendes mit Bezug auf unser Test()-Beispiel:

1 Wenn i Mod 1000 = 0, dann DoEvents

Dies verringert die Reaktionsfähigkeit von Excel sichtbar, aber die Auswirkungen auf die Leistung werden verringert.

Wann sollten DoEvents verwendet werden?

Trotz dieser Gefahren ist DoEvents eine praktische Funktion, die beim Testen und Debuggen hilft. Ziehen Sie in Erwägung, DoEvents zu lang laufenden Schleifen hinzuzufügen.

Ein weiterer Grund für die Einbeziehung von DoEvents besteht darin, Benutzerfeedback zu ermöglichen. Ein Makro kann beispielsweise die Beschriftungen einer UserForm mit Fortschrittsanzeigen aktualisieren. Ohne DoEvents empfängt Excel möglicherweise nicht die Meldungen zum Neuzeichnen der UserForm, was einem Benutzer den Eindruck vermittelt, dass das Makro nicht mehr funktioniert - insbesondere, wenn Sie zu einem anderen Programm wechseln und dann versuchen, wieder zu Excel zu wechseln. Mit DoEvents wird die UserForm jedoch weiterhin neu gezeichnet und Aktualisierungen des Fortschritts des Makros werden weiterhin angezeigt.

In den meisten Fällen möchten Sie DoEvents nicht viel in Ihren Code aufnehmen und können oft weggelassen werden. Wenn Ihr Makro jedoch Reaktionsfähigkeit benötigt, zählen Sie sie nicht aus!

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave