Kurzfassung —
Worksheet.Unprotectist der Hauptschalter ausgeschaltet. Es hält Excel davon ab, dieLocked-Markierungen durchzusetzen, rührt diese Markierungen aber nicht an — das Aufheben des Schutzes entsperrt keine Zellen, es hört nur vorerst auf, die Sperren zu befolgen. Wurde das Blatt mit einem Passwort geschützt, müssen Sie genau dasselbe übergeben, sonst bekommen Sie den Laufzeitfehler 1004 (falsches Passwort) oder einen modalen Dialog, der ein unbeaufsichtigtes Makro aufhängt. Fast jedes bearbeitende Makro packt seine Arbeit in ein Sandwich aus aufheben ▸ ändern ▸ schützen — und die eine Regel, auf die es ankommt, lautet: in einem Fehlerhandler erneut schützen, damit ein Absturz das Blatt nie offen lässt.
Sub UpdateAndReLock()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Form")
ws.Unprotect Password:="ac" ' Durchsetzung AUS (exaktes Passwort)
On Error GoTo ReLock ' was auch immer als Naechstes passiert...
ws.Range("C4:C12").ClearContents ' ...die Arbeit erledigen...
ReLock:
ws.Protect Password:="ac" ' ...immer wieder AN schalten
End Sub
Unprotect ist die Code-Fassung von Überprüfen ▸ Blattschutz aufheben und der notwendige erste Zug,
sobald ein Makro auf ein Blatt schreiben muss, das Sie gesperrt haben. Es sieht trivial aus — eine Zeile,
ein optionales Argument — und das ist es auch, genau bis das Blatt ein Passwort hat oder das Makro auf
halbem Weg abbricht. Beides verwandelt einen Einzeiler in ein Support-Ticket. Das Denkmodell, das Sie aus
dem Ärger heraushält, lautet: Unprotect ist vorübergehend und paarweise — Sie nehmen die Sperre ab, um
eine Aufgabe zu erledigen, und Sie sind dafür verantwortlich, sie wieder anzubringen.
Was Sie lernen
- Das Denkmodell —
Unprotectdeaktiviert die Durchsetzung, es ändert dieLocked-Markierungen nicht - Die eine Regel, auf die es ankommt — in einem Fehlerhandler erneut schützen, damit ein Absturz das Blatt nie offen lässt
- Die Passwort-Falle: warum ein falsches oder fehlendes Passwort 1004 wirft oder an einem Dialog hängt
- Warum ein
Unprotectauf einem bereits offenen Blatt eine harmlose Leeroperation ist, auf die Sie sich verlassen können - Wie Sie mit einer Schleife jedes Blatt einer Arbeitsmappe entsperren
- Die ehrliche Grenze — VBA kann ein Passwort, das Sie vergessen haben, nicht wiederherstellen
Das Denkmodell: Schalter aus, Markierungen unberührt
Der Schutz besteht aus zwei Schichten: der Locked-Markierung je Zelle (die Entscheidung, wer was
bearbeiten darf) und Protect/Unprotect (dem Schalter, der diese Markierungen durchsetzt oder
ignoriert). Unprotect wirkt nur auf den Schalter. Jede Zelle behält genau den Locked-Zustand, den sie
hatte; Sie haben Excel lediglich gesagt, es solle aufhören, ihn durchzusetzen.
Das ist wichtig, weil Leute erwarten, Unprotect „öffne die Zellen", und dann überrascht sind, wenn sie
erneut Protect aufrufen und dieselben Zellen wie zuvor gesperrt sind. Nichts wurde entsperrt — die
Durchsetzung wurde pausiert und dann fortgesetzt. Wollen Sie ändern, welche Zellen bearbeitbar sind, ist
das eine Aufgabe für die Locked-Eigenschaft, solange das Blatt ungeschützt ist,
nicht für Unprotect selbst.
Die wichtigste Regel: in einem Fehlerhandler erneut schützen
Die Standardform jedes Makros, das ein geschütztes Blatt bearbeitet, ist ein Sandwich: aufheben, die
Arbeit erledigen, wieder schützen. Die Gefahr sitzt in der mittleren Scheibe. Wirft der Schritt „die
Arbeit erledigen" einen Fehler — eine falsche Referenz, ein fehlendes Blatt, ein Typkonflikt —, hält die
Ausführung an, das abschließende Protect läuft nie, und das Blatt bleibt weit offen. Der Nutzer schließt
die Datei ahnungslos, und Ihre sorgfältig gesperrte Vorlage ist jetzt für jeden bearbeitbar.
Die Lösung besteht darin, das erneute Schützen mit einem Fehlerhandler bedingungslos zu machen, sodass es läuft, ob die Arbeit gelingt oder platzt:
Sub SafeEdit()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Form")
ws.Unprotect Password:="ac"
On Error GoTo CleanExit
' ... die eigentliche Arbeit, die scheitern koennte ...
ws.Range("C4:C12").ClearContents
CleanExit:
ws.Protect Password:="ac", UserInterfaceOnly:=True
If Err.Number <> 0 Then MsgBox "Update failed: " & Err.Description
End Sub
Das ist dieselbe CleanExit-Disziplin, die jedes verlässliche Makro zum Schließen von Dateien oder zum
Wiederherstellen von ScreenUpdating nutzt — ein einziges Ausgangs-Label, an dem der Code
„alles-wieder-zurück" lebt. Das vollständige Muster steht unter
Fehlerbehandlung. Die Faustregel ist einfach: Die Zeile, die das Blatt
erneut schützt, darf nicht nur auf dem glücklichen Pfad erreichbar sein.
Die Passwort-Falle
Wurde ein Blatt mit einem Passwort geschützt, braucht Unprotect genau dieses Passwort, und es falsch zu
treffen scheitert auf zwei verschiedene und gleichermaßen ärgerliche Arten. Übergeben Sie das falsche
Passwort, und Sie bekommen den Laufzeitfehler 1004: „The password you supplied is not correct." Übergeben
Sie kein Passwort an ein passwortgeschütztes Blatt, öffnet Excel in einer interaktiven Sitzung den
Passwort-Dialog — der ein unbeaufsichtigtes oder geplantes Makro still für immer aufhängt, weil niemand
da ist, um zu tippen.
ws.Unprotect Password:="ac" ' richtig: exaktes Passwort, laeuft sauber
ws.Unprotect ' auf einem Passwort-Blatt: oeffnet einen modalen Dialog - haengt einen Batch-Job
ws.Unprotect Password:="wrong" ' Laufzeitfehler 1004
Daraus folgt die Regel: Ein automatisiertes Makro muss das Passwort immer ausdrücklich übergeben, und es darf sich nie darauf verlassen, dass ein Mensch da ist, um einen Dialog zu beantworten. Schützen Sie irgendwo mit einem Passwort, hinterlegen Sie es in einer Konstanten, die Ihr Aufhebe-Code lesen kann, damit die beiden nie auseinanderdriften.
Unprotect auf einem offenen Blatt ist eine sichere Leeroperation
Eine kleine Tatsache, die defensiven Code sauberer macht: Unprotect auf einem Blatt aufzurufen, das
nicht geschützt ist, tut nichts und wirft keinen Fehler. Das bedeutet, Sie können am Anfang einer Routine
Unprotect aufrufen, ohne zuvor ws.ProtectContents zu prüfen — war das Blatt bereits offen, ist der
Aufruf ein harmloser Durchläufer; war es gesperrt, öffnet er es. Das ist ungewöhnlich nachsichtig für VBA
und erlaubt Ihnen, den Aufhebe-Schritt ohne Wächter zu schreiben. (Das Umgekehrte ist nicht symmetrisch:
Protect auf einem bereits geschützten Blatt wirft einen Fehler, blindes erneutes Schützen braucht also
mehr Vorsicht.)
Jedes Blatt in einer Schleife entsperren
Eine häufige echte Aufgabe ist, vor einem Massen-Neuaufbau den Schutz einer ganzen Arbeitsmappe zu
entfernen. Durchlaufen Sie die Worksheets-Sammlung und heben Sie bei jedem den Schutz auf, indem Sie das
gemeinsame Passwort übergeben:
Sub UnprotectAllSheets()
Const PW As String = "ac"
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:=PW ' Leeroperation auf jedem nicht geschuetzten Blatt
Next ws
End Sub
Weil Unprotect auf ungeschützten Blättern eine Leeroperation ist, ist die Schleife sicher, selbst wenn
nur einige Register gesperrt waren. Ergänzen Sie sie am Ende des Neuaufbaus mit einer passenden
schütze-alle-Schleife. Nutzten verschiedene Blätter verschiedene Passwörter, funktioniert diese einfache
Schleife nicht — was ein gutes Argument dafür ist, in einer Arbeitsmappe, die Sie automatisieren müssen, ein
Passwort (oder keines) zu verwenden. Zum Durchlaufen der Sammlung siehe Worksheets.
Die ehrliche Grenze: vergessene Passwörter
Es lohnt sich, es klar zu sagen, denn es ist eine der häufigsten Suchen hinter diesem Thema: Unprotect
braucht das Passwort, das gesetzt wurde. VBA bietet Ihnen keinen unterstützten Weg, ein Passwort, das Sie
wirklich vergessen haben, wiederherzustellen oder aufzudecken — die Sprache kann nur ein Passwort
anwenden, das Sie bereits kennen. Haben Sie Ihr eigenes Blatt geschützt und das Passwort verloren, ist der
praktische Weg, aus einer Sicherung oder einer früheren Version der Datei wiederherzustellen. Gewöhnen Sie
sich an, das Passwort in einer Konstanten neben dem Code aufzubewahren, der es nutzt, damit „ich habe es
vergessen" einer Arbeitsmappe, die Sie pflegen, nie passiert.
Wie ExcelMaster hilft
Das Aufheben des Schutzes ist leicht fast richtig hinzubekommen und beißt Sie dann doch: Ein Makro scheitert zwischen dem Aufheben und dem erneuten Schützen und lässt Ihre Vorlage still offen, ein geplanter Job hängt für immer an einem Passwort-Dialog, den niemand sieht, oder eine Schleife stolpert über Blätter, die je ein anderes Passwort hatten.
ExcelMaster lässt Sie die Aufgabe
beschreiben — „aktualisiere diese Zellen auf dem gesperrten Blatt und bringe den Schutz wieder an" — und
schreibt das Sandwich aufheben-arbeiten-schützen mit dem erneuten Schützen in einem CleanExit-Handler,
sodass ein Absturz das Blatt nie offen lassen kann, übergibt das Passwort ausdrücklich, damit nichts an
einem Dialog hängt, und erinnert Sie daran, dass ein vergessenes Passwort nicht aus Code wiederherstellbar
ist. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Wie hebe ich in VBA den Blattschutz mit einem Passwort auf?
Übergeben Sie das exakte Passwort an das Argument Password: ws.Unprotect Password:="ac". Es muss mit
dem Passwort übereinstimmen, das beim Schützen des Blattes verwendet wurde. Ein falsches Passwort wirft den
Laufzeitfehler 1004; das Weglassen des Passworts auf einem passwortgeschützten Blatt öffnet einen modalen
Dialog, der ein unbeaufsichtigtes Makro aufhängt. Übergeben Sie das Passwort in automatisiertem Code immer
ausdrücklich.
Warum bekomme ich beim Aufheben des Blattschutzes Fehler 1004?
Die häufigste Ursache ist ein falsches Passwort — „The password you supplied is not correct." Prüfen Sie,
ob das Unprotect-Passwort mit dem übereinstimmt, das zum Protect genutzt wurde, idealerweise indem Sie
beide in einer einzigen Konstanten hinterlegen. Fehler 1004 kann auch auftauchen, wenn Sie ein Blatt
referenzieren, das nicht existiert; stellen Sie sicher, dass der Name in Worksheets("...") genau so
geschrieben ist wie das Register.
Entsperrt das Aufheben des Blattschutzes seine Zellen?
Nein. Unprotect schaltet nur die Durchsetzung der Locked-Markierungen ab; jede Zelle behält genau den
Locked-Zustand, den sie hatte. Wenn Sie das Blatt erneut schützen, sind dieselben Zellen wie zuvor
gesperrt. Um zu ändern, welche Zellen bearbeitbar sind, setzen Sie die Locked-Eigenschaft, solange das
Blatt ungeschützt ist — das Aufheben allein ändert nichts an den Sperren.
Wie hebe ich den Schutz aller Blätter einer Arbeitsmappe auf?
Durchlaufen Sie die Sammlung und heben Sie bei jedem mit dem gemeinsamen Passwort auf:
For Each ws In ThisWorkbook.Worksheets: ws.Unprotect Password:="ac": Next ws. Weil Unprotect auf jedem
nicht geschützten Blatt eine Leeroperation ist, ist die Schleife sicher, selbst wenn nur einige Register
gesperrt waren. Das setzt ein Passwort für die ganze Arbeitsmappe voraus; verschiedene Passwörter je Blatt
bräuchten jeweils ihren eigenen Wert.
Kann VBA ein vergessenes Blattschutz-Passwort wiederherstellen?
Nein. VBA kann nur ein Passwort anwenden, das Sie bereits kennen; es hat keinen unterstützten Weg, ein vergessenes aufzudecken oder wiederherzustellen. Haben Sie das Passwort zu Ihrem eigenen Blatt verloren, stellen Sie die Arbeitsmappe aus einer Sicherung oder einer früheren Version wieder her. Bewahren Sie das Passwort in einer Konstanten neben Ihrem Aufhebe-Code auf, damit es für eine Datei, die Sie pflegen, nie verloren geht.
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 Zellen sperren · VBA Fehlerbehandlung · VBA Worksheets · VBA Workbook_Open
