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

VBA Zellen sperren in Excel — die Locked-Eigenschaft, die allein nichts bewirkt

|

VBA Zellen sperren in Excel — die Locked-Eigenschaft, die allein nichts bewirkt

KurzfassungRange.Locked ist eine Markierung, keine Sperre. Locked = True zu setzen ändert nichts, was Sie sehen oder spüren; die Zelle wird erst unbearbeitbar, sobald das Blatt geschützt ist — dann liest Excel jede Zellmarkierung und friert die als Locked markierten ein. Deshalb ist die klassische Klage — „ich habe Locked = True gesetzt, aber Nutzer können die Zelle weiter bearbeiten" — kein Bug: Das Blatt war nie geschützt. Und weil jede Zelle Locked = True beginnt, ist der echte Ablauf umgekehrt: Sie entsperren die Eingabezellen (Locked = False) und schützen dann, sodass alles andere die Standardsperre erbt.

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

    ws.Cells.Locked = True                 ' jede Zelle ist es bereits - nur explizit
    ws.Range("C4:C12").Locked = False      ' die Eingaben sind die Ausnahmen
    ws.Range("C4:C12").FormulaHidden = False
    ws.Protect Password:="ac"              ' JETZT beginnen die Markierungen zu zaehlen
End Sub

Locked ist das Kontrollkästchen in Zellen formatieren ▸ Schutz und die am meisten missverstandene Eigenschaft in der Excel-Automatisierung — weil es scheinbar nichts tut, wenn man es setzt. Sie führen cell.Locked = True aus, Sie klicken die Zelle an, und Sie können weiter darin tippen. Alles arbeitet genau wie entworfen; Sie haben nur entdeckt, dass Locked für sich allein wirkungslos ist. Sobald Sie verinnerlicht haben, dass Locked eine Notiz an das Schutzsystem ist statt ein Akt des Sperrens, wird das ganze Feature vorhersagbar.

Was Sie lernen

  • Das Denkmodell — Locked ist eine Markierung, die der Schutzschalter liest, keine Sperre an sich
  • Die eine Regel, die den Bug Nummer eins erklärt — Locked bewirkt nichts, bis Sie das Blatt schützen
  • Warum jede Zelle gesperrt beginnt, und der umgekehrte Ablauf „die Eingaben entsperren", der daraus folgt
  • Warum Locked auf einer gemischten Auswahl Null zurückliest, und wie Sie darauf prüfen
  • FormulaHidden — die Begleit-Markierung, die eine Formel vor der Bearbeitungsleiste verbirgt
  • Warum Sie Locked setzen müssen, solange das Blatt ungeschützt ist

Das Denkmodell: eine Markierung, keine Sperre

Stellen Sie sich Locked als Klebezettel auf jeder Zelle vor, auf dem steht „frier mich ein, wenn der Schutz an ist". Den Zettel zu schreiben friert nichts ein; es hält nur eine Absicht fest. Das eigentliche Einfrieren geschieht später, und von jemand anderem — Worksheet.Protect —, der das Blatt durchgeht, jeden Zettel liest und ihn durchsetzt. Zwei Zellen können identische Locked-Markierungen tragen und sich völlig unterschiedlich verhalten, rein abhängig davon, ob ihr Blatt geschützt ist.

Deshalb sind Locked und Protect ein Paar, das man zusammen verstehen muss. Locked ist die Karte von wer-darf-was-bearbeiten; Protect ist der Schalter, der beginnt, die Karte zu befolgen. Keines erledigt die Aufgabe allein: Eine Karte, die niemand durchsetzt, ändert nichts, und ein Schalter ohne Karte sperrt einfach alles (weil die Standardkarte jede Zelle als gesperrt markiert).

Die Regel, die den Bug Nummer eins erklärt: Locked ist wirkungslos, bis Sie schützen

Die meistgesuchte Frustration hinter diesem Thema ist „ich habe die Zelle auf Locked = True gesetzt, aber der Nutzer kann sie weiter bearbeiten". Es ist nie ein Bug in Locked. Es bedeutet, das Blatt ist nicht geschützt, also setzt nichts die Markierung durch. Die Locked-Eigenschaft hat auf einem ungeschützten Blatt überhaupt keine Wirkung — Sie können sie auf jeder Zelle der Arbeitsmappe setzen und nichts daran ändern, was jemand tippen kann.

ws.Range("A1").Locked = True    ' A1 ist jetzt als gesperrt markiert...
' (Blatt ist nicht geschuetzt)  ' ...und weiterhin voll bearbeitbar
ws.Protect                      ' JETZT ist A1 eingefroren

Locked ist also immer die Hälfte eines Zweischritts, und der zweite Schritt ist der, den man vergisst. Muss eine Zelle Bearbeitung widerstehen, ist Locked = True zu setzen notwendig, aber nicht hinreichend — das Blatt muss geschützt sein, damit die Markierung beißt. Sooft das Sperren „nicht funktioniert", ist das Erste, was zu prüfen ist, ob ws.ProtectContents überhaupt True ist.

Jede Zelle beginnt gesperrt — also entsperren Sie die Ausnahmen

Hier ist die Tatsache, die den ganzen Ablauf umdreht: Jede Zelle in einem neuen Blatt ist bereits Locked = True. Das bedeutet, „die Zellen sperren, die ich schützen will" ist fast nie der richtige Zug — sie sind schon gesperrt. Das richtige Muster ist das Umgekehrte: den Standard belassen und die Handvoll Zellen entsperren, die Leute bearbeiten sollen.

ws.Cells.Locked = True              ' der Standard; fuer den naechsten Leser genannt
ws.Range("C4:C12").Locked = False   ' die Eingaben entsperren - die Ausnahmen
ws.Protect Password:="ac"           ' alles andere erbt die Sperre

Denken Sie in „welche Zellen sind die Eingaben?" und entsperren Sie jene; alles andere — Beschriftungen, Formeln, Überschriften — behält die Standardsperre und ist in dem Moment eingefroren, in dem Sie schützen. Das skaliert weit besser, als jede Zelle aufzuzählen, die schreibgeschützt sein soll, und deshalb entsperren gut gebaute Vorlagen einen kleinen, offensichtlichen Eingabebereich und sperren den Rest durch Auslassung.

Die Null-Falle: Locked auf einer gemischten Auswahl lesen

Locked liest nur dann sauber zurück, wenn ein Bereich einheitlich ist. Enthält ein Bereich sowohl gesperrte als auch entsperrte Zellen, gibt das Lesen von .Locked Null zurück, nicht True oder False. Ein naiver Test platzt also:

If ws.Range("A1:A10").Locked Then      ' Laufzeitfehler, wenn der Bereich gemischt ist (Null)

Wenn A1:A10 einige gesperrte und einige entsperrte Zellen hat, ist .Locked Null, und If Null Then wirft „Invalid use of Null." Sichern Sie es mit IsNull ab, wenn ein Bereich gemischt sein könnte:

Dim state As Variant
state = ws.Range("A1:A10").Locked
If IsNull(state) Then
    ' gemischt - je Zelle entscheiden
ElseIf state Then
    ' alle gesperrt
Else
    ' alle entsperrt
End If

Das ist dasselbe Drei-Zustands-Verhalten, das Sie bei WrapText und anderen Zelleigenschaften sehen: Einheitliche Bereiche liefern einen Boolean, gemischte Bereiche liefern Null. Lesen Sie eine Zelle nach der anderen, wenn Sie Gewissheit brauchen.

FormulaHidden: die Zelle sperren, das Rezept verbergen

Locked hat einen Begleiter, FormulaHidden, und zusammen decken sie die zwei Dinge ab, die Sie meist von einem ausgelieferten Modell wollen: Der Nutzer kann die Formel nicht ändern und sie nicht einmal sehen. Wie Locked tut FormulaHidden nichts, bis das Blatt geschützt ist; sobald es das ist, zeigt eine Zelle mit FormulaHidden = True ihr Ergebnis im Gitter, aber eine leere Bearbeitungsleiste, wenn sie ausgewählt ist.

ws.Range("D4:D100").Locked = True
ws.Range("D4:D100").FormulaHidden = True   ' die Berechnung vor der Bearbeitungsleiste verbergen
ws.Protect Password:="ac"

Nutzen Sie es, wenn Sie eine Berechnung als Blackbox ausliefern — ein Preismodell, eine Bewertungsformel — und wollen, dass Leute der Zahl vertrauen, ohne die Haube zu heben. Wie immer ist es eine Geste für Bequemlichkeit und geistiges Eigentum, keine Sicherheit: Wie Schutzpasswörter ist es leicht ausgehebelt. Aber um eine Formel aus dem beiläufigen Blick herauszuhalten, ist es genau die richtige Markierung.

Warum Sie Locked setzen müssen, solange das Blatt ungeschützt ist

Die Locked-Karte muss gezeichnet werden, solange das Blatt offen ist. Der Versuch cell.Locked = False auf einem geschützten Blatt wirft den Laufzeitfehler 1004 — Sie können die Karte nicht neu zeichnen, während der Schalter, der sie durchsetzt, an ist. Die Reihenfolge ist also fest und nicht verhandelbar: Unprotect (falls nötig), jede Locked- und FormulaHidden-Markierung setzen, dann Protect. Muss ein Makro zur Laufzeit ändern, welche Zellen bearbeitbar sind, muss es zuerst den Schutz aufheben, die Markierungen anpassen und erneut schützen — Sie können die Markierungen nie durch eine aktive Sperre hindurch bearbeiten.

Wie ExcelMaster hilft

Locked scheitert auf die verwirrendste Art, die möglich ist: Es tut genau nichts, ohne Fehler, bis das Blatt geschützt ist — also setzen Leute es, sehen Nutzer trotzdem „gesperrte" Zellen bearbeiten und nehmen an, die Eigenschaft sei kaputt. Dann bringt sie der umgekehrte Ablauf zu Fall, oder ein Lesen über einen gemischten Bereich wirft „Invalid use of Null", oder sie versuchen, Zellen durch einen aktiven Schutz hindurch neu zu markieren, und treffen auf 1004.

ExcelMaster lässt Sie das Ziel sagen — „lass Leute nur die gelben Eingabezellen bearbeiten und verbirg die Formeln" — und setzt Locked und FormulaHidden in der richtigen Reihenfolge, entsperrt die Eingaben, statt alles andere zu sperren, paart die Markierungen mit dem Protect-Aufruf, der sie tatsächlich durchsetzt, und sichert Lesevorgänge über gemischte Bereiche gegen Null ab. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Warum können Nutzer eine Zelle weiter bearbeiten, nachdem ich Locked in VBA auf True gesetzt habe?

Weil Locked nichts tut, bis das Blatt geschützt ist. Es ist nur eine Markierung, die das Schutzsystem liest — ein ungeschütztes Blatt ignoriert sie vollständig. Setzen Sie die Zellen auf Locked = True (oder belassen Sie den Standard), dann rufen Sie ws.Protect auf. Ist Bearbeiten danach immer noch möglich, prüfen Sie mit ws.ProtectContents, ob das Blatt tatsächlich geschützt ist.

Wie sperre ich nur einige Zellen und lasse den Rest bearbeitbar?

Nutzen Sie den umgekehrten Ablauf. Jede Zelle beginnt Locked = True, entsperren Sie also die Ausnahmen, statt die Ziele zu sperren: ws.Cells.Locked = True, dann ws.Range("C4:C12").Locked = False für die Eingabezellen, dann ws.Protect. Alles, was Sie nicht entsperrt haben, erbt die Standardsperre und ist eingefroren, sobald das Blatt geschützt ist.

Warum wirft das Lesen der Locked-Eigenschaft einen Fehler?

Weil der Bereich gemischt ist. Locked gibt Null zurück, wenn ein Bereich sowohl gesperrte als auch entsperrte Zellen enthält, und If Range.Locked Then auf einem Null wirft „Invalid use of Null." Testen Sie zuerst mit IsNull, oder lesen Sie eine Zelle nach der anderen: Ein einheitlicher Bereich liefert einen Boolean, ein gemischter liefert Null.

Was ist der Unterschied zwischen Locked und FormulaHidden?

Locked verhindert, dass eine Zelle bearbeitet wird, sobald das Blatt geschützt ist; FormulaHidden verhindert, dass ihre Formel in der Bearbeitungsleiste gesehen wird, sobald das Blatt geschützt ist. Beide sind Markierungen, die nur unter Schutz wirken. Nutzen Sie sie zusammen, um eine Berechnung auszuliefern, die der Nutzer weder ändern noch inspizieren kann — die Zelle sperren und die Formel verbergen, dann schützen.

Kann ich den Locked-Zustand einer Zelle ändern, solange das Blatt geschützt ist?

Nein. Locked (oder FormulaHidden) auf einem geschützten Blatt zu setzen wirft den Laufzeitfehler 1004. Sie müssen die Karte zeichnen, solange die Durchsetzung aus ist: Unprotect, falls nötig, die Locked-Markierungen setzen, dann Protect. Ein Makro, das die Bearbeitbarkeit zur Laufzeit ändert, muss den Schutz aufheben, anpassen und erneut schützen.

Getestet in

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

Verwandte Anleitungen: VBA Blatt schützen · VBA Blattschutz aufheben · VBA Zeilenumbruch · VBA Range · VBA Formula