TL;DR —
Application.ScreenUpdating = Falseweist Excel an, den Bildschirm nicht mehr neu zu zeichnen, während Ihr Makro läuft, und ihn erst am Ende einmal neu aufzubauen. Das beseitigt das Flackern und bringt einen moderaten Geschwindigkeitsgewinn — aber nur, wenn Ihr Code in Zellen schreibt, auswählt oder scrollt. Für ein Makro, das wegen Neuberechnung oder Datei-I/O langsam ist, bringt es nichts. Setzen Sie es am Ende aufTruezurück und verlassen Sie sich nie darauf, dass es sich selbst zurücksetzt — ein Absturz kann den Bildschirm eingefroren und grau zurücklassen:
Sub PaintRows()
Application.ScreenUpdating = False ' Neuzeichnen stoppen - kein Flackern mehr
On Error GoTo CleanExit ' damit ein Absturz den Bildschirm nicht haengen laesst
Dim i As Long
For i = 2 To 5000
Cells(i, 1).Interior.Color = IIf(i Mod 2 = 0, RGB(240, 240, 240), vbWhite)
Next i
CleanExit:
Application.ScreenUpdating = True ' immer wiederherstellen, auch nach einem Fehler
End Sub
Jedes Mal, wenn Ihr Makro eine Zelle ändert, will Excel den Bildschirm neu zeichnen, um sie anzuzeigen.
Tun Sie das 5.000 Mal, bezahlen Sie für 5.000 Neuzeichnungen, die der Benutzer nie sehen musste.
ScreenUpdating = False bündelt sie zu einer Neuzeichnung am Ende. Diese Anleitung ruht auf einer
Idee — ScreenUpdating ist ein Schalter fürs Neuzeichnen, kein magischer Geschwindigkeitsschalter. Es
entfernt Zeichenarbeit, und nur Zeichenarbeit. Verstehen Sie das, und Sie wissen genau, wann es hilft,
wann es eine verschenkte Zeile ist und warum es die eigentliche Gefahr ist, es nach einem Absturz
abgeschaltet zu lassen.
Was Sie lernen
- Das mentale Modell — Excel zeichnet nach jeder Änderung neu; dieser Schalter bündelt die Neuzeichnungen zu einer
- Wo es wirklich hilft — Schreiben, Auswählen, Scrollen — und wo es nichts bewirkt
- Die wichtigste Regel — ein Absturz kann den Bildschirm hängen lassen, also stellen Sie ihn in einem Fehlerhandler wieder her
- Die Flacker-Falle der verschachtelten Wiederherstellung — warum der Bildschirm noch flackert, nachdem Sie es abgeschaltet haben
- Wie es mit Calculation und EnableEvents zusammenspielt
ScreenUpdatinggegenDisplayStatusBarund die anderen kosmetischen Schalter
Das mentale Modell: Excel zeichnet nach jeder Änderung neu
Standardmäßig hält Excel den Bildschirm in Echtzeit mit der Arbeitsmappe synchron. Ihr Makro setzt
A1, Excel zeichnet neu; es setzt A2, Excel zeichnet erneut neu. Jede Neuzeichnung ist für sich
genommen billig, doch in einer Schleife über Tausende Zellen dominieren die Neuzeichnungen — und Sie
sehen den Bildschirm zappeln, während das Makro sich das Blatt hinunterschreibt.
Application.ScreenUpdating = False setzt das aus. Excel aktualisiert die Arbeitsmappe im Speicher
weiter, hört aber auf, sie zu zeichnen. Wenn Sie die Eigenschaft wieder auf True setzen (oder das
Makro endet), zeichnet Excel einmal neu, und das fertige Ergebnis erscheint in einem einzigen sauberen
Sprung. Der Benutzer sieht das Vorher und das Nachher, nie das Flackern dazwischen.
Application.ScreenUpdating = False ' Excel hoert auf zu zeichnen (arbeitet aber weiter)
' ... Tausende Zellschreibvorgaenge geschehen unsichtbar ...
Application.ScreenUpdating = True ' eine Neuzeichnung zeigt den Endzustand
Wo es wirklich hilft — und wo nicht
Das ist der Teil, den die meisten Tutorials überspringen, und genau darum geht es. ScreenUpdating
entfernt Zeichenarbeit. Ist Ihr Makro aus einem anderen Grund langsam, ändert das Abschalten nichts.
Es hilft viel, wenn Ihr Code:
- in einer Schleife in viele Zellen schreibt,
.Select/.Activatenutzt (jede Auswahl ist eine Neuzeichnung),- scrollt oder ändert, was auf dem Bildschirm sichtbar ist.
Es bewirkt nichts, wenn Ihr Makro langsam ist wegen:
- schwerer Neuberechnung nach jedem Schreibvorgang — das ist Aufgabe von Calculation,
- Lesen oder Schreiben von Dateien, Abfragen einer Datenbank oder Aufrufen eines Webdienstes,
- reiner Arbeit im Speicher an Arrays und Variablen (es gibt nichts neu zu zeichnen).
Wenn Sie also ScreenUpdating = False ergänzt haben und das Makro immer noch langsam ist, haben Sie zum
falschen Schalter gegriffen. Der größte Geschwindigkeitsgewinn in der Praxis ist meist gar nicht dieser
— es ist das Ersetzen einer Zelle-für-Zelle-Schleife durch ein einziges Array-Lesen und ein einziges
Array-Schreiben, was die Neuzeichnungen und den Aufwand pro Zelle in einem Zug entfernt.
ScreenUpdating ist der letzte Schliff darauf, nicht die Lösung für sich.
Die wichtigste Regel: ein Absturz kann den Bildschirm hängen lassen
Hier ist der Fehler, den jeder erwischt. Sie setzen ScreenUpdating = False, Ihr Makro läuft auf
halbem Weg in einen Fehler, und die Ausführung stoppt — vor der Zeile, die es wieder einschaltet.
Excel sitzt nun mit abgeschalteter Bildschirmaktualisierung da. Das Fenster wirkt eingefroren, halb
gezeichnet oder schlicht grau; Geisterbilder von Dialogfeldern bleiben hängen. Benutzer erzwingen das
Beenden von Excel, weil sie einen Absturz vermuten, dabei ist nur ein Schalter abgeschaltet geblieben.
Sie werden lesen, dass Excel ScreenUpdating automatisch auf True zurücksetzt, wenn ein Makro endet.
Manchmal tut es das — aber Sie können nicht um ein „Manchmal“ herum entwerfen. Wenn das Makro in einen
Fehler läuft, statt sauber zu enden, oder wenn Sie im Haltemodus Schritt für Schritt durchgehen,
bleibt der Bildschirm hängen. Microsofts eigene Empfehlung lautet, es selbst wieder auf True zu
setzen. Die Regel ist also einfach — stellen Sie es in einem Fehlerhandler wieder her, damit es
läuft, ob das Makro gelingt oder abstürzt.
Sub SafeRepaint()
Application.ScreenUpdating = False
On Error GoTo CleanExit
' ... Arbeit, die einen Fehler ausloesen koennte ...
Cells(1, 1).Value = 1 / 0 ' Knall
CleanExit:
Application.ScreenUpdating = True ' dies laeuft auch nach dem Fehler oben
If Err.Number <> 0 Then MsgBox Err.Description
End Sub
Das Muster aus On Error GoTo CleanExit und Label ist dieselbe Disziplin, die der ganze Cluster teilt —
siehe VBA On Error. Ohne es verwandelt ein einziger unbehandelter Fehler eine
Geschwindigkeitsoptimierung in ein Support-Ticket.
Die Flacker-Falle der verschachtelten Wiederherstellung
Ein subtilerer Bug — Sie haben ScreenUpdating abgeschaltet, aber der Bildschirm flackert
trotzdem. Die übliche Ursache ist ein aufgerufenes Sub, das es wieder auf True setzt.
Sub Outer()
Application.ScreenUpdating = False
FormatBlock ' dieses Sub schaltet es wieder ein - Neuzeichnen beginnt hier
WriteTotals ' flackert, weil die Aktualisierung wieder an ist
Application.ScreenUpdating = True
End Sub
Sub FormatBlock()
Application.ScreenUpdating = False
' ... Formatierung ...
Application.ScreenUpdating = True ' <-- der Schuldige - aktiviert es auch fuer den Aufrufer
End Sub
ScreenUpdating ist eine einzige globale Einstellung, kein Stapel. Wenn FormatBlock es wieder auf
True setzt, ist es auch für Outer True, und jeder Schreibvorgang nach dem Aufruf zeichnet neu. Die
Lösung ist, den Schalter dem obersten Makro gehören zu lassen und Hilfs-Subs ihn nicht anfassen zu
lassen — oder jedes Hilfs-Sub den vorgefundenen Wert sichern und wiederherstellen zu lassen, statt
True fest zu verdrahten. Genau dieselbe Gewohnheit „sichern, was es war, wiederherstellen, was es war“
hält auch Calculation sicher.
ScreenUpdating gegen die anderen kosmetischen Schalter
ScreenUpdating hat leisere Verwandte. Application.DisplayStatusBar = False und
Application.Calculation = xlCalculationManual werden oft gemeinsam für Geschwindigkeit gesetzt, und
Application.EnableEvents = False für Korrektheit. Machen Sie sich aber klar, was was tut —
ScreenUpdating ist rein kosmetisch und harmlos zu vergessen, denn im schlimmsten Fall gibt es ein
eingefroren wirkendes Fenster, das ein Neustart behebt. Calculation
abgeschaltet zu lassen hinterlässt still falsche Zahlen, und
EnableEvents abgeschaltet zu lassen hinterlässt die Ereignisse der
Arbeitsmappe tot. Im Code sehen sie gleich aus — drei = False-Zeilen ganz oben —, doch die Kosten,
jeden einzelnen zu vergessen, sind völlig verschieden. Behandeln Sie alle drei als „muss
wiederhergestellt werden“ und wissen Sie, warum die Einsätze sich unterscheiden.
Wie ExcelMaster hilft
ScreenUpdating ist eine Zeile, doch es gut einzusetzen heißt zu wissen, wann es hilft
(bildschirmgebundene Schleifen), wann es verschwendet ist (rechen- oder I/O-gebundene Arbeit) und es
immer in einem Fehlerhandler wiederherzustellen, damit ein Absturz die Anzeige nicht hängen lässt. Das
ist erstaunlich viel Urteilsvermögen für eine einzige Eigenschaft.
ExcelMaster schreibt
standardmäßig die schnelle Variante. Bitten Sie es, „jede zweite Zeile über 5.000 Zeilen einzufärben“,
und es bündelt die Arbeit, umschließt ScreenUpdating (und Calculation und EnableEvents, wenn
Ereignisse im Spiel sind) mit einer CleanExit-Wiederherstellung und lässt den Schalter ganz weg, wenn
das Makro nicht bildschirmgebunden ist. Sie bekommen den Geschwindigkeitsgewinn und die Sicherheit, ohne
sich zu merken, welcher Hebel welche Art von Langsamkeit behebt.
Häufig gestellte Fragen
Was macht Application.ScreenUpdating = False in VBA?
Es weist Excel an, den Bildschirm während des Makrolaufs nicht mehr neu zu zeichnen. Excel aktualisiert
die Arbeitsmappe im Speicher weiter, zeichnet die Änderungen aber nicht, was das sichtbare Flackern und
die Kosten pro Neuzeichnung beseitigt. Wenn Sie ScreenUpdating = True wieder setzen, zeichnet Excel
einmal neu, und das Endergebnis erscheint in einem einzigen Sprung.
Warum ist mein Makro nach dem Setzen von ScreenUpdating = False immer noch langsam?
Weil ScreenUpdating nur die Arbeit des Bildschirm-Neuzeichnens entfernt. Ist das Makro wegen
Neuberechnung, Datei- oder Datenbank-I/O oder dem Schleifenaufwand pro Zelle langsam, ändert das
Abschalten der Neuzeichnungen nichts. Setzen Sie Application.Calculation = xlCalculationManual für
rechenlastige Makros und ersetzen Sie Zelle-für-Zelle-Schleifen durch ein einziges Array-Lesen und
-Schreiben für den größten Gewinn.
Muss ich ScreenUpdating wieder auf True setzen?
Ja — setzen Sie es ausdrücklich zurück. Excel stellt es manchmal wieder her, wenn ein Makro sauber
endet, aber nicht, wenn das Makro einen unbehandelten Fehler auslöst oder Sie im Haltemodus anhalten,
was den Bildschirm eingefroren oder grau zurücklassen kann. Stellen Sie es in einem Fehlerhandler wieder
her (On Error GoTo CleanExit mit Application.ScreenUpdating = True im Label), damit es läuft, ob das
Makro gelingt oder scheitert.
Warum flackert der Bildschirm noch, obwohl ich ScreenUpdating abgeschaltet habe?
Meist, weil ein aufgerufenes Sub ScreenUpdating = True setzt, bevor es zurückkehrt. Es ist eine
einzige globale Einstellung, also tut ein Hilfs-Sub, das es wieder einschaltet, dies auch für den
Aufrufer, und jeder Schreibvorgang nach dem Aufruf zeichnet neu. Lassen Sie den Schalter dem obersten
Makro gehören und Hilfs-Subs ihn entweder nicht anfassen oder den vorgefundenen Wert sichern und
wiederherstellen.
Was ist der Unterschied zwischen ScreenUpdating, Calculation und EnableEvents?
Alle drei sind Application-Schalter, die Sie abschalten, um ein Makro schneller oder sicherer zu
machen, aber sie steuern Verschiedenes. ScreenUpdating stoppt Bildschirm-Neuzeichnungen (kosmetisch,
harmlos zu vergessen). Calculation stoppt die Formel-Neuberechnung
(abgeschaltet zu lassen zeigt veraltete Zahlen). EnableEvents stoppt das
Feuern von Ereignishandlern (abgeschaltet zu lassen legt die Ereignisse der Arbeitsmappe lahm, bis Excel
neu startet).
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 17.08.2026.
Verwandte Anleitungen: VBA Calculation · VBA EnableEvents · VBA On Error · VBA WorksheetFunction · VBA Range
