Makro läuft langsam, geht aber schnell (Microsoft Excel)
Fredric schrieb über ein Problem mit einem Makro. Wenn er das Makro im VB-Editor mit F8 ausführt (Schritt durch das Makro), ist es in wenigen Minuten fertig. Wenn er das Makro direkt ausführt, scheint es ewig zu dauern, bis es ausgeführt wird. Oft dauert es 20 Minuten oder länger, bis es ausgeführt wird. Obwohl Fredrics Arbeitsmappe groß ist (46 MB), ist der Zeitunterschied zwischen den beiden Laufmethoden störend.
Probleme wie dieses können verwirrend sein, und sie erfordern häufig eine Hochleistungsanalyse, um dies herauszufinden. Ein guter Anfang ist das Hinzufügen eines „Timer-Codes“ in Ihrem Makro. Fügen Sie eine kleine Routine hinzu, die einen Zeitwert speichert, und eine andere Routine, die diesen gespeicherten Wert mit der aktuellen Zeit vergleicht und die Differenz anzeigt. Am Anfang eines Codeabschnitts, den Sie analysieren möchten, rufen Sie die erste Routine auf (wodurch die Startzeit gespart wird)
und dann rufen Sie am Ende des Codeabschnitts die zweite Routine auf.
Auf diese Weise können Sie bestimmen, welche Teile Ihres Codes am längsten ausgeführt werden. Dies sind die Codeabschnitte, auf die Sie sich dann konzentrieren, damit Sie herausfinden können, was sie tun, was so lange dauert.
Eine andere Sache ist, sicherzustellen, dass Sie diese beiden Zeilen am Anfang Ihres Makros hinzufügen:
Application.ScreenUpdating = False Application.EnableEvents = False
Diese deaktivieren die Bildschirmaktualisierung, wodurch ein laufendes Makro verlangsamt und Ereignisse deaktiviert werden können. Diese letzte Zeile ist enthalten, damit Änderungen, die vom Makro in Ihrem Arbeitsblatt vorgenommen werden, die Neuberechnungsroutinen von Excel nicht auslösen. Wenn Ihr Makro viele Änderungen an den Daten im Arbeitsblatt vornimmt und nach jeder Änderung eine vollständige Neuberechnung ausgelöst wird, kann mit einer so großen Arbeitsmappe viel Zeit für die Neuberechnung aufgewendet werden. Am Ende Ihres Makros kehren Sie den Effekt der beiden hinzugefügten Zeilen um:
Application.EnableEvents = True Application.ScreenUpdating = True
Möglicherweise möchten Sie auch die automatische Berechnung deaktivieren, während Ihr Makro ausgeführt wird. Dadurch wird sichergestellt, dass Excel nicht versucht, Zwischenergebnisse zu berechnen, während das Makro Dinge bewegt oder auf andere Weise mit Daten arbeitet. Verwenden Sie diese Zeile am Anfang Ihres Makros, um die automatische Berechnung zu deaktivieren:
Application.Calculation = xlCalculationManual
Es ist eine gute Idee, die automatische Berechnung in einem Makro nur zu deaktivieren, wenn Ihr Makro nicht auf berechneten Informationen im Arbeitsblatt basiert. Wenn Sie es deaktivieren, können Sie die automatische Berechnung später wieder aktivieren, indem Sie die folgende Zeile am Ende Ihres Makros platzieren:
Application.Calculation = xlCalculationAutomatic
Ein Leser schlug vor, sich auf eine andere Anwendung zu konzentrieren, während das Makro im Excel-Arbeitsblatt ausgeführt wird. Öffnen Sie beispielsweise Notepad und aktivieren Sie dieses Fenster. Das Makro sollte sich erheblich beschleunigen, wenn Excel nicht mehr aktiv ist. Eine weitere Möglichkeit besteht darin, den Mauszeiger nach unten in den Taskleistenbereich zu bewegen, anstatt ihn im aktiven Excel-Arbeitsblatt zu haben.
_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 (818) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: