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

VBA Blattschutz aufheben in Excel — den Schutz sicher entfernen (und die Passwort-Falle)

|

VBA Blattschutz aufheben in Excel — den Schutz sicher entfernen (und die Passwort-Falle)

KurzfassungWorksheet.Unprotect ist der Hauptschalter ausgeschaltet. Es hält Excel davon ab, die Locked-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 — Unprotect deaktiviert die Durchsetzung, es ändert die Locked-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 Unprotect auf 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