Wenn Dave ein Makro schreibt, das viele Informationen in einer For …​ Next-Schleife verarbeiten muss, verwendet er immer die Statusleiste, um den Fortschritt anzuzeigen.

In der Regel wird dort eine Meldung angezeigt, z. B. „Zeile X von Y verarbeiten“. Wenn „Y“ ein großer Wert ist (das obere Ende der For …​ Next-Schleife), beendet Excel häufig die Aktualisierung der Statusleiste und zeigt in der Titelleiste von Excel so etwas wie „Nicht antworten“ an. Das Makro wird jedoch noch ausgeführt, und wenn es abgeschlossen ist, reagiert Excel und alles funktioniert wie es sollte. Dave fragt sich, wie er Excel dazu bringen kann, sich nicht mehr so ​​zu verhalten, und stattdessen die Statusleistenaktualisierungen wie gewünscht anzeigen kann.

Dieses Verhalten scheint aufzutreten, wenn Windows den Eindruck hat, dass Excel nicht mehr reagiert. (Schließlich ist Windows für das verantwortlich, was in der Titelleiste eines Programms angezeigt wird.) Ich konnte das Verhalten recht einfach reproduzieren, wenn in Windows mehrere Programme geöffnet sind und ich auf ein anderes Programmfenster klicke, während Excel durchläuft ein langes Makro. Wenn Excel mit der Ausführung des Makros beschäftigt ist oder Windows nicht auffordern kann, die Statusleiste zu aktualisieren, scheint es tatsächlich so, als ob Excel nicht mehr reagiert.

Es gibt zwei mögliche Ansätze, die verwendet werden können. Zunächst können Sie den Befehl DoEvents in der Schleife verwenden. Normalerweise wird dies verwendet, um das Makro anzuweisen, auf alles zu achten, was sich in der Ereigniswarteschlange befindet, z. B. wenn jemand die Tastatur drückt. Dies entspricht dem Erzwingen, dass Excel von dem Makro, an dem es arbeitet, „nachschaut“ und mit Windows kommuniziert. Dies würde Windows notwendigerweise wissen lassen, dass Excel wirklich reagiert, und die Aktualisierungen der Statusleiste ermöglichen.

Sie können den Befehl sogar direkt nach dem Aktualisieren der Statusleiste eingeben:

Application.StatusBar = "Processing row " & X & " of " & Y DoEvents

Die andere Möglichkeit besteht darin, die Statusleiste nicht so stark zu aktualisieren.

Wenn das obere Ende Ihrer Schleife sehr groß ist, ist es möglicherweise besser, einen Prozentsatz zu berechnen und die Statusleiste zu aktualisieren, wenn ein Teil der Gesamtsumme abgeschlossen ist – möglicherweise alle 5% oder 10% der Gesamtsumme. Dies würde bedeuten, dass die Statusleiste während der Schleife nur 10 oder 20 Mal aktualisiert werden muss und nicht hunderte oder tausende Male. Dies kann bedeuten, dass Windows mit den Anforderungen zum Aktualisieren der Statusleiste Schritt halten kann und Ihr Makro als Bonus möglicherweise schneller ausgeführt wird, da die Statusleiste nicht so oft aktualisiert werden muss.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

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

Dieser Tipp (13341) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.