Umfangreiche Makros können ganz schön zeitaufwendig werden. Je nach Art und Weise, wie das Makro Befehle ausführen soll, kann der Zeitaufwand für die Ausführung eines Makros stark variieren. Besonders zeitaufwendig sind z.B. Kopiervorgänge zwischen unterschiedlichen Arbeitsmappen, aufwendige Formelberechnungen oder Filterfunktionen großer Datenmengen.
Das Hauptproblem langsam ausgeführter Makros liegt in der Regel aber nicht an den Befehlen an sich. Mit jeder geänderten Zelle aktualisiert Excel die Ansicht. Diese ständige Aktualisierung, gerade wenn durch Formeln weitere Zellen betroffen sind, bremst das Makro regelrecht aus.
Dieser Vorgang kann im Makro allerdings auch problemlos ausgeschaltet werden. Dazu können Sie zu Beginn des Makros durch die beiden Zeilen
Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
die Aktualisierung der Ansicht und die Neuberechnung der Zellen ausschalten.
Am Ende des Makros aktivieren Sie die Funktionen und starten die Neuberechnung wieder. Hierfür fügen Sie diese drei Zeilen am Ende vor “End Sub” ein.
Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Call Calculate
Soll die automatische Zellberechnung einzeln aufrufbar sein, können Sie die zwei Zeilen Code auch in einzelne VBA Module auslagern. Bitte vergessen Sie anschließend jedoch nicht, die automatische Zellberechnung wieder zu aktivieren!
Sub Zellberechnung_deaktivieren() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual End Sub Sub Zellberechnung_aktivieren() Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Call Calculate End Sub
Eine weitere Methode möglichst Ihre Rechenleistung optimal auszunutzen ist die Zuweisung der richtigen Variablentypen. Definieren Sie keinen Datentyp wird immer der Datentyp “Variant” standardmäßig verwendet. Das funktioniert nicht, wenn Sie am Anfang des Moduls “Open Explicit” definiert haben. Dann verlangt der VBA-Editor immer eine Definition sämtlicher Variablen. Eine ausführliche Definition der unterschiedlichen Variablentypen finden Sie bei Wikibooks. Auf eine ausführliche Behandlung der Thematik verzichte ich daher an dieser Stelle, da Sie auf dieser Seite wirklich eine sehr gute und ausführliche Erklärung finden und die Problematik nur am Rande das eigentlich hier besprochene Problem betrifft.
Hat mein Makro rasant beschleunigt – bin überrascht
Super Tipp, davor 10 Sekunden nun Nichtmal eine..
Da kann ich mich nur anschließen! Dieser Tipp hat mein Makro von 21 Sekunden auf nur 6 Sekunden verringert! Danke schön!