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.
Stellen Sie außerdem sicher, 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
_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 (2436) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: