TL;DR —
Application.Calculation = xlCalculationManualweist Excel an, nach jedem Schreibvorgang nicht mehr neu zu berechnen, und verschiebt jede Neuberechnung auf einen Durchgang. Bei einer formellastigen Arbeitsmappe ist das der Schalter, der ein Makro wirklich schnell macht — weit mehr als die Bildschirmaktualisierung. Doch es ist der gefährlichste Hebel in VBA — lassen Sie es versehentlich auf Manual, hören Formeln schlicht auf zu aktualisieren, ohne sichtbaren Hinweis, sodass die Arbeitsmappe veraltete, falsche Zahlen zeigt. Sichern Sie den Zustand, stellen Sie ihn in einem Fehlerhandler wieder her und überlassen Sie es nie dem Zufall:
Sub FastCalc()
Dim savedCalc As XlCalculation
savedCalc = Application.Calculation ' merken, was es WAR
Application.Calculation = xlCalculationManual ' Neuberechnung nach jedem Schreibvorgang stoppen
On Error GoTo CleanExit
' ... Tausende Schreibvorgaenge, keine Neuberechnung dazwischen ...
Application.Calculate ' eine Neuberechnung erzwingen, wenn Sie Ergebnisse brauchen
CleanExit:
Application.Calculation = savedCalc ' den GESICHERTEN Zustand wiederherstellen, nicht blind Automatic
End Sub
Jedes Mal, wenn Ihr Makro in eine Zelle schreibt, berechnet Excel die gesamte Abhängigkeitskette neu, die diese Zelle speist. Bei einer Arbeitsmappe mit schweren Formeln ist diese Neuberechnung — nicht der Bildschirm — der eigentliche Engpass. Der manuelle Modus lässt zuerst Tausende Schreibvorgänge landen und berechnet einmal neu. Diese Anleitung ruht auf einer Idee — Calculation ist der Schalter, der die Geschwindigkeit bringt, und der, den Sie sich niemals abgeschaltet zu lassen leisten können, weil sein Versagen unsichtbar ist. Begreifen Sie diese Asymmetrie, und Sie behandeln ihn mit dem nötigen Respekt.
Was Sie lernen
- Das mentale Modell — jeder Schreibvorgang löst eine vollständige Neuberechnung aus; Manual verschiebt sie auf einen Durchgang
- Warum es der eigentliche Geschwindigkeitsgewinn bei formellastigen Mappen ist (und ScreenUpdating es nicht ist)
- Die wichtigste Regel — ein zurückgelassener Manual-Zustand zeigt veraltete Zahlen ohne Warnung
- Eine Neuberechnung mitten im Makro mit
Application.Calculateerzwingen, wenn ein späterer Schritt ein Ergebnis braucht - Den gesicherten Zustand wiederherstellen, statt
xlCalculationAutomaticfest zu verdrahten - Der
error 1004, den Sie treffen, wenn Sie Calculation ohne offene Arbeitsmappe setzen
Das mentale Modell: jeder Schreibvorgang löst eine Neuberechnung aus
Excels Standard ist xlCalculationAutomatic — sobald sich eine Zelle ändert, berechnet Excel jede
Formel neu, die transitiv von ihr abhängt. Interaktiv ist das genau, was Sie wollen — Sie tippen eine
Zahl, und die Summen aktualisieren sich. Doch in einem Makro, das 10.000 Zellen schreibt, führt Excel
die vollständige Abhängigkeits-Neuberechnung bis zu 10.000 Mal aus, und bei einem echten Modell kann
jeder Durchgang Tausende Formeln berühren.
Application.Calculation = xlCalculationManual durchtrennt diese Verbindung. Schreibvorgänge landen in
den Zellen, aber Excel berechnet erst neu, wenn Sie es anweisen (oder der Benutzer F9 drückt). Sie
erledigen das gesamte Schreiben günstig und lösen dann am Ende eine Neuberechnung aus.
Application.Calculation = xlCalculationManual
Range("A1:A10000").Value = someArray ' 10.000 Werte hinein, null Neuberechnungen
Application.Calculate ' eine Neuberechnung, einmalig
Die drei Zustände sind xlCalculationAutomatic, xlCalculationManual und
xlCalculationSemiautomatic (automatisch außer für Datentabellen). Bei Makros interessieren Sie die
ersten beiden.
Warum das der eigentliche Geschwindigkeitsgewinn ist
Es gibt eine Rangordnung der Makro-Geschwindigkeitsschalter, und man greift sie in der falschen
Reihenfolge auf. ScreenUpdating ist der berühmte, aber es entfernt nur
Bildschirm-Neuzeichnungen. Bei einer Arbeitsmappe voller VLOOKUP, SUMIFS oder flüchtiger Funktionen
wie OFFSET und INDIRECT ist das Neuzeichnen neben der Neuberechnung belanglos. Schalten Sie allein
ScreenUpdating ab, wird ein rechengebundenes Makro kaum schneller; schalten Sie Calculation ab, kann
es von Minuten auf Sekunden fallen. Wenn Sie bei einer formellastigen Mappe nur einen Schalter setzen,
setzen Sie diesen. Die beiden zusammen — plus das Schreiben ganzer Arrays statt Zelle für Zelle in einer
Schleife — sind das Standardrezept für schnelle Makros.
Die wichtigste Regel: ein zurückgelassener Manual-Zustand ist still
Hier ist, warum Calculation der gefährliche Schalter ist. Wenn
ScreenUpdating abgeschaltet bleibt, sehen Sie es — der Bildschirm ist
eingefroren. Wenn Calculation auf Manual bleibt, sehen Sie nichts. Die Arbeitsmappe sieht völlig
normal aus. Aber jede Formel ist auf ihrem zuletzt berechneten Wert eingefroren. Jemand bearbeitet eine
Eingabe, die Summe ändert sich nicht, und entweder bemerkt er es viel später oder — schlimmer — gar
nicht und verschickt einen Bericht, der auf veralteten Zahlen beruht.
Das ist der schädlichste zurückgelassene Zustand in ganz VBA, gerade weil es kein Symptom gibt, bis jemand einer falschen Zahl traut. Die Disziplin ist also strenger als bei den kosmetischen Schaltern — stellen Sie ihn immer wieder her, und zwar in einem Fehlerhandler, damit ein Absturz mitten im Makro die Arbeitsmappe nicht in Manual hängen lassen kann.
' FRAGIL - laeuft die Schleife in einen Fehler, bleibt Calculation auf Manual haengen und jede
' Formel in der Arbeitsmappe hoert still auf zu aktualisieren:
Application.Calculation = xlCalculationManual
DoRiskyWork
Application.Calculation = xlCalculationAutomatic ' bei einem Fehler nie erreicht
Die Lösung ist das CleanExit-Muster aus dem TL;DR — On Error GoTo CleanExit und Wiederherstellung
im Label. Siehe VBA On Error für die vollständige Behandlung.
Den gesicherten Zustand wiederherstellen, nicht ein fest verdrahtetes Automatic
Fast jedes Tutorial beendet das Makro mit Application.Calculation = xlCalculationAutomatic. Das ist
ein getarnter Bug. Der Benutzer hat die Arbeitsmappe vielleicht absichtlich in den manuellen Modus
versetzt — schwere Modelle werden oft auf Manual gelassen, damit sie nicht bei jedem Tastendruck neu
berechnen. Ihr Makro läuft, und schon haben Sie seine Arbeitsmappe still auf Automatic umgestellt und
genau die langsamen Neuberechnungen ausgelöst, die er vermeiden wollte.
Das richtige Muster ist, zu sichern, was Sie vorgefunden haben, und das wiederherzustellen:
Dim savedCalc As XlCalculation
savedCalc = Application.Calculation ' koennte Manual oder Automatic sein
Application.Calculation = xlCalculationManual
' ... Arbeit ...
Application.Calculation = savedCalc ' die Arbeitsmappe so lassen, wie Sie sie vorfanden
Ein Makro sollte die Umgebung in dem Zustand hinterlassen, den es geliehen hat, nicht in dem, den es angenommen hat. Das ist dieselbe Gewohnheit des „Sichern und Wiederherstellen“, die auch das Flackern verschachtelter Aufrufe bei ScreenUpdating fernhält.
Eine Neuberechnung erzwingen, wenn ein späterer Schritt ein Ergebnis braucht
Der manuelle Modus hat eine zweite Falle, die nichts mit dem Wiederherstellen zu tun hat. Wenn Ihr Makro Formeln schreibt und dann die Ergebnisse liest, die diese Formeln erzeugen, sind die Lesevorgänge veraltet — die Formeln haben noch nicht neu berechnet.
Application.Calculation = xlCalculationManual
Range("B1").Formula = "=SUM(A1:A100)"
Debug.Print Range("B1").Value ' veraltet - B1 hat noch nicht neu berechnet
Application.Calculate ' jetzt neu berechnen
Debug.Print Range("B1").Value ' korrekt
Wann immer ein späterer Schritt von einem Wert abhängt, den ein früherer Schreibvorgang hätte berechnen
sollen, rufen Sie zuerst Application.Calculate (ganze Anwendung), ActiveSheet.Calculate (ein Blatt)
oder Range.Calculate (ein Bereich) auf. Im manuellen Modus sind Ergebnisse nur so frisch wie Ihr
letzter Calculate-Aufruf.
Der error 1004 ohne offene Arbeitsmappe
Ein letzter Fallstrick — Application.Calculation lässt sich nur setzen, wenn eine Arbeitsmappe offen
ist. Es aus einem Add-In oder einer Startroutine zu setzen, während keine Arbeitsmappe existiert, löst
run-time error 1004 aus. Läuft Ihr Code früh im Lebenszyklus von Excel, sichern Sie ihn mit
If Workbooks.Count > 0 Then ab, bevor Sie die Eigenschaft anfassen.
Wie ExcelMaster hilft
Calculation bringt den größten Geschwindigkeitsgewinn der drei Schalter und trägt das größte Risiko.
Es richtig einzusetzen heißt, den vorherigen Zustand zu sichern, eine Neuberechnung zu erzwingen, wenn
ein späterer Schritt ein Formelergebnis liest, den gesicherten Zustand in einem Fehlerhandler
wiederherzustellen und zu wissen, dass es ohne offene Arbeitsmappe 1004 werfen kann. Verpassen Sie
eines davon, bekommen Sie entweder einen Absturz oder, schlimmer, eine Arbeitsmappe voller still
veralteter Zahlen.
ExcelMaster übernimmt das ganze
Muster für Sie. Beschreiben Sie die Aufgabe — „berechne dieses Modell neu, nachdem die Annahmen
aktualisiert wurden“ —, und es setzt den manuellen Modus, erledigt die Schreibvorgänge, ruft
Application.Calculate genau dort auf, wo ein Ergebnis gebraucht wird, und stellt den
Berechnungszustand, mit dem Sie begonnen haben, in einem CleanExit-Handler wieder her. Die
Arbeitsmappe kommt genau so zurück, wie der Benutzer sie verlassen hat, nur schneller.
Häufig gestellte Fragen
Was macht Application.Calculation = xlCalculationManual?
Es hält Excel davon ab, Formeln nach jeder Änderung automatisch neu zu berechnen. Schreibvorgänge landen
weiterhin in den Zellen, aber keine Formel berechnet neu, bis Sie Application.Calculate aufrufen oder
der Benutzer F9 drückt. Bei einer formellastigen Arbeitsmappe ist das der größte einzelne
Geschwindigkeitsgewinn, der einem Makro zur Verfügung steht, weil es Tausende Neuberechnungen durch eine
ersetzt.
Warum haben meine Formeln nach dem Ausführen eines Makros aufgehört zu aktualisieren?
Mit ziemlicher Sicherheit hat das Makro Application.Calculation = xlCalculationManual gesetzt und nicht
wiederhergestellt — oft, weil es vor der Wiederherstellungszeile in einen Fehler lief. Die Arbeitsmappe
ist nun im manuellen Modus, sodass Formeln ihren zuletzt berechneten Wert ohne sichtbaren Hinweis
halten. Setzen Sie Application.Calculation = xlCalculationAutomatic (oder drücken Sie F9), und stellen
Sie die Einstellung in Ihrem Code in einem Fehlerhandler wieder her, damit sie nicht erneut hängen
bleiben kann.
Soll ich Calculation wieder auf Automatic setzen oder auf das, was es war?
Stellen Sie wieder her, was es war. Sichern Sie den Wert zuerst
(savedCalc = Application.Calculation) und setzen Sie ihn am Ende wieder auf savedCalc.
xlCalculationAutomatic fest zu verdrahten überschreibt still Benutzer, die ein schweres Modell
absichtlich im manuellen Modus halten, und erzwingt die langsamen Neuberechnungen, die sie vermieden.
Wie erzwinge ich eine Neuberechnung in VBA im manuellen Modus?
Rufen Sie Application.Calculate auf, um alles neu zu berechnen, ActiveSheet.Calculate für ein Blatt
oder SomeRange.Calculate für einen Bereich. Sie brauchen das immer dann, wenn ein späterer Schritt
einen Wert liest, den ein früherer Formel-Schreibvorgang hätte erzeugen sollen — im manuellen Modus
bleiben diese Zellen veraltet, bis Sie berechnen.
Warum bekomme ich error 1004 beim Setzen von Application.Calculation?
Weil Application.Calculation sich nur setzen lässt, solange eine Arbeitsmappe offen ist. Läuft Ihr
Code beim Start oder aus einem Add-In, bevor eine Arbeitsmappe existiert, löst die Zuweisung run-time
error 1004 aus. Sichern Sie sie mit If Workbooks.Count > 0 Then ab, bevor Sie die Eigenschaft setzen.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 17.08.2026.
Verwandte Anleitungen: VBA ScreenUpdating · VBA EnableEvents · VBA On Error · VBA Range · VBA WorksheetFunction
