Kurzfassung —
Worksheet.Protectentscheidet nicht, welche Zellen gesperrt sind. Es ist ein Hauptschalter, der dieLocked-Markierung anschaltet, die bereits auf jeder Zelle sitzt — und jede Zelle ist standardmäßigLocked = 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 nichtUserInterfaceOnly:=Trueübergeben, und dieses Flag wird nicht mit der Datei gespeichert — Sie wenden es bei jedemWorkbook_Openerneut 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 —
Protectist ein Schalter, der dieLocked-Markierung durchsetzt, er wählt sie nicht aus - Die eine Regel, die die meisten Fehler verhindert — die Eingaben zuerst entsperren, dann schützen
- Warum
Protectohne Argumente auch Filtern, Sortieren und Formatieren blockiert - Warum ein geschütztes Blatt Ihre eigenen Makros bricht, und was
UserInterfaceOnly:=Truewirklich 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
