🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA ScreenUpdating in Excel — Flackern stoppen und Makros beschleunigen (und warum es ein langsames Makro nicht rettet)

|

VBA ScreenUpdating in Excel — Flackern stoppen und Makros beschleunigen (und warum es ein langsames Makro nicht rettet)

TL;DRApplication.ScreenUpdating = False weist 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 auf True zurü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
  • ScreenUpdating gegen DisplayStatusBar und 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 / .Activate nutzt (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