Immer wenn Sie einen Zellenwert aktualisieren, durchläuft Excel einen Prozess, um die Arbeitsmappe neu zu berechnen. Wenn Sie direkt in Excel arbeiten, möchten Sie, dass dies in 99,9 % der Fälle geschieht (mit Ausnahme, wenn Sie mit einer extrem großen Arbeitsmappe arbeiten). Dies kann jedoch Ihren VBA-Code wirklich verlangsamen. Es empfiehlt sich, Ihre Berechnungen am Anfang von Makros auf manuell einzustellen und Berechnungen am Ende von Makros wiederherzustellen. Wenn Sie die Arbeitsmappe neu berechnen müssen, können Sie Excel manuell anweisen, zu berechnen.
Automatische Berechnungen deaktivieren
Sie können die automatische Berechnung mit einem Makro deaktivieren, indem Sie es auf xlmanual setzen. Verwenden Sie den folgenden Teil des VBA-Codes:
1 | Anwendung.Berechnung = xlManual |
Automatische Berechnungen wieder aktivieren
So schalten Sie die automatische Berechnung mit der Einstellung xlAutomatic wieder ein:
1 | Anwendung.Berechnung = xlAutomatic |
Ich empfehle, die automatischen Berechnungen ganz zu Beginn Ihres Verfahrens zu deaktivieren und die automatischen Berechnungen am Ende wieder zu aktivieren. Es wird so aussehen:
Makrobeispiel für automatische Berechnungen deaktivieren
12345678 | Unter Auto_Calcs_Example()Anwendung.Berechnung = xlManual'Etwas tunAnwendung.Berechnung = xlAutomaticEnd Sub |
Manuelle Berechnung
Wenn automatische Berechnungen deaktiviert sind, können Sie die Berechnung Befehl, um eine Neuberechnung von Excel zu erzwingen:
1 | Berechnung |
Sie können Excel auch anweisen, nur ein einzelnes Arbeitsblatt neu zu berechnen:
1 | Worksheets("sheet1").Berechnen |
Sie können VBA auch anweisen, nur einen Bereich neu zu berechnen (klicken Sie hier, um unseren Artikel über VBA-Berechnungsmethoden zu lesen).
So könnte dies in einem Makro aussehen:
12345678910111213 | Unter Auto_Calcs_Example_Manual_Calc()Anwendung.Berechnung = xlManual'Etwas tun'Neu berechnenBerechnung'Mehr Dinge tunAnwendung.Berechnung = xlAutomaticEnd Sub |
VBA-Einstellungen - Beschleunigungscode
Wenn Sie Ihren Code beschleunigen möchten, sollten Sie auch diese anderen Einstellungen anpassen:
Das Deaktivieren der Bildschirmaktualisierung kann einen großen Unterschied in der Geschwindigkeit machen:
1 | Application.ScreenUpdating = False |
Auch das Deaktivieren der Statusleiste macht einen kleinen Unterschied:
1 | Application.DisplayStatusBar = False |
Wenn Ihre Arbeitsmappe Ereignisse enthält, sollten Sie auch Ereignisse zu Beginn Ihrer Prozeduren deaktivieren (um den Code zu beschleunigen und Endlosschleifen zu vermeiden!):
1 | Application.EnableEvents = False |
Schließlich kann Ihr VBA-Code verlangsamt werden, wenn Excel versucht, Seitenumbrüche neu zu berechnen (Hinweis: nicht alle Verfahren sind betroffen). Um DisplayPageBreaks zu deaktivieren, verwenden Sie diese Codezeile:
1 | ActiveSheet.DisplayPageBreaks = False |