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

VBA Blatt schützen in Excel — ein Arbeitsblatt sperren, ohne Ihre Eingaben auszusperren

|

VBA Blatt schützen in Excel — ein Arbeitsblatt sperren, ohne Ihre Eingaben auszusperren

KurzfassungWorksheet.Protect entscheidet nicht, welche Zellen gesperrt sind. Es ist ein Hauptschalter, der die Locked-Markierung anschaltet, die bereits auf jeder Zelle sitzt — und jede Zelle ist standardmäßig Locked = True. Ein Blattschutz ohne Vorbereitung friert also alles ein, auch die Zellen, die Ihre Nutzer ausfüllen sollen. Der echte Ablauf ist umgekehrt: zuerst die Eingabezellen entsperren, dann das Blatt schützen. Der Schutz blockiert außerdem Ihre eigenen Makros, sofern Sie nicht UserInterfaceOnly:=True übergeben, und dieses Flag wird nicht mit der Datei gespeichert — Sie wenden es bei jedem Workbook_Open erneut an.

Sub LockDownForm()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Form")

    ws.Cells.Locked = True                 ' alles ist ohnehin gesperrt - explizit gesagt
    ws.Range("C4:C12").Locked = False      ' NUR die Eingabezellen entsperren
    ws.Protect Password:="ac", AllowFiltering:=True   ' jetzt den Hauptschalter umlegen
End Sub

Protect ist die Code-Fassung von Überprüfen ▸ Blatt schützen. Es ist eine der häufigsten Schlusszeilen in einem Makro, das ein Formular oder einen Bericht aufbaut, und zugleich eine der am meisten missverstandenen — weil man erwartet, dass es „die Zellen, die mir wichtig sind" sperrt, während es in Wahrheit jede Zelle sperrt, die eine Locked-Markierung trägt, und Excel setzt diese Markierung in dem Moment auf alle, in dem ein Blatt entsteht. Sobald Sie Protect als Schalter sehen, der eine Entscheidung durchsetzt, welche die Zellen bereits tragen, statt als das, was die Entscheidung trifft, fällt jedes überraschende Verhalten an seinen Platz.

Was Sie lernen

  • Das Denkmodell — Protect ist ein Schalter, der die Locked-Markierung durchsetzt, er wählt sie nicht aus
  • Die eine Regel, die die meisten Fehler verhindert — die Eingaben zuerst entsperren, dann schützen
  • Warum Protect ohne Argumente auch Filtern, Sortieren und Formatieren blockiert
  • Warum ein geschütztes Blatt Ihre eigenen Makros bricht, und was UserInterfaceOnly:=True wirklich tut
  • Warum dieses Flag beim Speichern verschwindet, und wo Sie es erneut anwenden
  • Warum das Passwort ein Schutz gegen Versehen ist, keine echte Sicherheit

Das Denkmodell: ein Schalter, keine Entscheidung

Denken Sie beim Schutz an zwei getrennte Dinge, die ständig in eins zusammengezogen werden. Die Entscheidung — „welche Zellen darf ein Nutzer bearbeiten?" — lebt auf jeder Zelle als ihre Locked-Eigenschaft. Die Durchsetzung — „ab jetzt diese Entscheidungen befolgen" — ist Worksheet.Protect. Der Schalter liest nicht Ihre Absichten; er liest das Locked-Flag, das bereits auf jeder Zelle sitzt, und standardmäßig ist dieses Flag überall True.

Diese eine Tatsache erklärt die häufigste Klage über den Blattschutz, die genau das Gegenteil dessen ist, was Anfänger erwarten. Man nimmt an, ein unvorbereitetes ws.Protect sperre nichts oder sperre „die wichtigen Zellen". Es sperrt alle, weil alle gesperrt zur Welt kamen. Die Überraschung ist also nie „mein Schutz hat nicht gewirkt" — sie ist „mein Schutz hat zu gut gewirkt, und jetzt kann niemand mehr etwas eintippen".

Die wichtigste Regel: zuerst die Eingaben entsperren, dann schützen

Weil jede Zelle standardmäßig Locked = True ist, lautet das richtige Muster nicht „die Zellen sperren, die ich schützen will". Es lautet „die wenigen Zellen entsperren, die ich offen lassen will, dann den Rest schützen". Sie markieren die Ausnahmen, nicht die Ziele:

ws.Cells.Locked = True              ' der Standard, fuer den naechsten Leser genannt
ws.Range("C4:C12").Locked = False   ' die Eingabespalte - die EINZIGEN editierbaren Zellen
ws.Protect Password:="ac"           ' es durchsetzen

Machen Sie es in der anderen Reihenfolge, und Sie ernten den klassischen Fehlschlag. Rufen Sie ws.Protect auf einem frischen Blatt auf und versuchen dann ws.Range("C4").Locked = False, wirft die zweite Zeile den Laufzeitfehler 1004 — Sie können den Locked-Zustand einer Zelle nicht ändern, während das Blatt geschützt ist. Die Locked-Markierungen müssen gesetzt werden, solange das Blatt ungeschützt ist; Protect ist immer der letzte Schritt, nachdem die Karte von wer-darf-was-bearbeiten fertig ist. Das ist der ganze Cluster in einem Satz: Locked ist die Karte, Protect schaltet die Durchsetzung an.

Protect ohne Argumente sperrt mehr, als Sie denken

ws.Protect sieht aus wie ein schlichtes An/Aus, aber es nimmt eine lange Liste von Argumenten, und seine Standardwerte sind restriktiv. Ohne Argumente hindert ein geschütztes Blatt Nutzer auch am Sortieren, Filtern, Formatieren und am Einfügen oder Löschen von Zeilen und Spalten — sogar in Zellen, die entsperrt sind. Das ist die Quelle der zweithäufigsten Klage: „Ich habe das Blatt geschützt, und jetzt sind die AutoFilter-Dropdowns tot."

Die Argumente sind ein Berechtigungsmenü. Schalten Sie genau das wieder ein, was das Blatt braucht:

ws.Protect Password:="ac", _
    AllowFiltering:=True, _
    AllowSorting:=True, _
    AllowFormattingCells:=True

Es gibt einen Haken, den man kennen sollte: AllowFiltering:=True lässt Nutzer bestehende AutoFilter-Dropdowns bedienen, aber keine neuen anlegen — wenden Sie den AutoFilter also an, bevor Sie schützen. Die Faustregel hier lautet, mit Absicht zu schützen: Beginnen Sie bei „alles ist blockiert" und schalten Sie die konkreten Interaktionen ein, die dieses Blatt erlauben soll, statt die restriktiven Standardwerte auszuliefern und danach die Beschwerden abzuarbeiten.

Die Falle, die jeden Makro-Autor erwischt: der Schutz blockiert Ihren eigenen Code

Hier ist die Falle, die ein funktionierendes Makro am Tag nach dem Aktivieren des Schutzes in den Laufzeitfehler 1004 verwandelt. Ein geschütztes Blatt unterscheidet nicht zwischen einem tippenden Nutzer und Ihrem schreibenden VBA — es blockiert beide. Eine Routine, die zufrieden ws.Range("A1").Value = 42 tat, beginnt in dem Moment zu scheitern, in dem das Blatt geschützt ist, weil Ihr eigener Code jetzt wie ein Eindringling behandelt wird.

Die Lösung ist das Argument UserInterfaceOnly:

ws.Protect Password:="ac", UserInterfaceOnly:=True

Mit UserInterfaceOnly:=True ist das Blatt gegen die Benutzeroberfläche geschützt — Klicks und Tastatureingaben —, aber Ihre Makros können es weiterhin frei ändern, ohne bei jedem Schreiben ein Unprotect/Protect-Ballett aufzuführen. Es ist der sauberste Weg, ein Blatt für Menschen gesperrt zu halten, während Ihr Code weiterarbeitet. Doch der Haken sitzt am Schwanz, und er ist der nächste Abschnitt.

Warum UserInterfaceOnly beim Speichern verschwindet

UserInterfaceOnly:=True wird nicht mit der Arbeitsmappe gespeichert. Wird die Datei geschlossen und wieder geöffnet, kommt das Blatt voll geschützt zurück — auch gegen Ihre Makros —, als hätten Sie das Flag nie übergeben. Der Schutz bleibt bestehen; der Teil „aber meinen Code durchlassen" nicht. Deshalb funktioniert ein Makro eine ganze Sitzung lang und wirft am nächsten Morgen 1004, was alle verwundert.

Die Lösung besteht darin, den Schutz mit dem Flag jedes Mal erneut anzuwenden, wenn die Arbeitsmappe öffnet:

' Im ThisWorkbook-Modul
Private Sub Workbook_Open()
    Worksheets("Form").Protect Password:="ac", UserInterfaceOnly:=True
End Sub

Das stellt beim Laden den Zustand „für Nutzer geschützt, für Code offen" wieder her, ohne irgendetwas zu entsperren oder die Locked-Karte zu stören. Behandeln Sie es als Pflichtbegleiter jedes UserInterfaceOnly-Schutzes: Verlassen Sie sich überhaupt auf das Flag, verlassen Sie sich auf Workbook_Open, um es wiederherzustellen. Zur Ereignismechanik siehe Workbook_Open.

Das Passwort ist eine Leitplanke, kein Schloss

Das Argument Password fühlt sich nach Sicherheit an, und es lohnt sich, ehrlich zu sagen, was es nicht ist. Passwörter für den Blattschutz nutzen schwache, gut dokumentierte Verschlüsselung; sie sind mit einer Vielzahl von Werkzeugen trivial zu entfernen und lassen sich sogar ganz außerhalb von Excel zurücksetzen. Behandeln Sie das Passwort als Leitplanke — es hält einen Kollegen davon ab, beiläufig in Ihre Formeln zu klicken oder eine Vorlage zu überschreiben — und nicht als Tresor für etwas Vertrauliches. Müssen die Daten wirklich geheim bleiben, ist der Blattschutz das falsche Werkzeug; lassen Sie sie aus der Datei heraus. Und bewahren Sie das Passwort sicher auf: VBA kann mit einem Passwort, das Sie kennen, Protect und Unprotect, aber es kann keines wiederherstellen, das Sie vergessen haben.

Wie ExcelMaster hilft

Der Schutz ist ein zweistufiges System, das sich rückwärts liest, und so scheitert er auf Arten, die im Moment des Fehlers nie einen Fehler auslösen — Sie sperren jede Eingabe aus, weil die Zellen standardmäßig gesperrt waren, Sie liefern ein „schreibgeschütztes" Blatt aus, dessen Filter tot sind, oder Ihr eigenes Makro wirft am Morgen danach 1004, weil UserInterfaceOnly beim Speichern verloren ging.

ExcelMaster lässt Sie sagen, was Sie tatsächlich wollen — „sperre diese Vorlage, aber lass Leute die gelben Zellen ausfüllen und weiter die Filter nutzen" — und schreibt die Schritte entsperren-dann-schützen in der richtigen Reihenfolge, schaltet die AllowXxx-Berechtigungen ein, die das Blatt braucht, ergänzt UserInterfaceOnly:=True mit einem Workbook_Open, damit es über das Speichern hinweg am Leben bleibt, und sagt Ihnen klar, dass das Passwort gegen Versehen schützt, nicht gegen einen entschlossenen Leser. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Warum kann nach dem Blattschutz in VBA niemand mehr etwas eintippen?

Weil jede Zelle standardmäßig Locked = True ist, sodass ws.Protect das gesamte Blatt sperrt. Der Schutz sucht sich nicht „die wichtigen Zellen" aus — er setzt die Locked-Markierung durch, die bereits auf allen sitzt. Setzen Sie Locked = False auf Ihren Eingabebereich, bevor Sie schützen: ws.Range("C4:C12").Locked = False, dann ws.Protect. Entsperren Sie die Ausnahmen, dann legen Sie den Schalter um.

Wie schütze ich ein Blatt in VBA mit einem Passwort?

Übergeben Sie das Argument Password: ws.Protect Password:="ac". Zum Aufheben liefern Sie dasselbe Passwort: ws.Unprotect Password:="ac". Bewahren Sie das Passwort im Code oder an einem sicheren Ort auf — VBA kann ein vergessenes nicht wiederherstellen. Und behandeln Sie es als Schutz gegen Versehen, nicht als Sicherheit: Passwörter für den Blattschutz sind trivial entfernbar und sollten nie darauf vertrauen dürfen, vertrauliche Daten verborgen zu halten.

Warum bekommt mein Makro auf einem geschützten Blatt Fehler 1004?

Ein geschütztes Blatt blockiert Ihre VBA-Schreibvorgänge genau so, wie es einen Nutzer blockiert. Schützen Sie mit UserInterfaceOnly:=True, damit das Blatt für Menschen gesperrt bleibt, während Ihr Code es weiterhin ändern kann. Beachten Sie, dass dieses Flag nicht mit der Arbeitsmappe gespeichert wird, also wenden Sie es in einem Workbook_Open-Ereignis erneut an — Worksheets("Form").Protect Password:="ac", UserInterfaceOnly:=True — sonst scheitert das Makro, nachdem die Datei wieder geöffnet wurde.

Wie halte ich Filtern und Sortieren auf einem geschützten Blatt am Laufen?

Standardmäßig blockiert Protect beides. Schalten Sie sie mit den Argumenten wieder ein: ws.Protect AllowFiltering:=True, AllowSorting:=True. AllowFiltering:=True lässt Nutzer bestehende AutoFilter-Dropdowns bedienen, aber keine neuen anlegen, wenden Sie den AutoFilter also an, bevor Sie schützen. Ergänzen Sie AllowFormattingCells:=True und die übrigen AllowXxx-Flags für jede Interaktion, die das Blatt noch braucht.

Was ist der Unterschied zwischen Blattschutz und Arbeitsmappenschutz?

Worksheet.Protect sperrt die Zellen auf einem Blatt gegen Bearbeitung. Workbook.Protect sperrt die Struktur der Arbeitsmappe — es hindert daran, Blätter hinzuzufügen, zu löschen, umzubenennen, zu verschieben oder auszublenden — und tut nichts für Zellinhalte. Sie lösen verschiedene Probleme: Der Blattschutz bewacht die Dateneingabe, der Arbeitsmappenschutz bewacht das Layout der Register. Auf einer fertigen Vorlage nutzen Sie oft beide.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 11.09.2026.

Verwandte Anleitungen: VBA Blattschutz aufheben · VBA Zellen sperren · VBA Workbook_Open · VBA AutoFilter · VBA Range