Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Problem mit protect / unprotect

Forumthread: VBA-Problem mit protect / unprotect

VBA-Problem mit protect / unprotect
14.12.2017 15:12:11
Holger
Hallo zusammen,
ich bitte bei folgendem Problem um Hilfe. Ich habe ein Formular entwickelt, bei dem alle Zellen bis auf die Eingabefelder gesperrt sind (Zellschutz + Blattschutz). Damit die Benutzer trotzdem eine Gliederung auf- und einblenden können, war ein kleines VBA-Makro erforderlich, das beim Öffnen automatisch gestartet hat. Hat auch alles geklappt, solange ich keinen PASSWORTSCHUTZ hatte.
Ich habe meine Lösung jetzt um den Passwortschutz ergänzt. Dieser soll beim Öffnen erst entfernt werden, dann werden die nötigen Änderungen vorgenommen, danach wird der Schutz wieder aktiviert. Und das für alle Register. KLAPPT ABER NICHT! Wenn ich die Datei nach Durchlauf des Makros prüfe, kann ich in jedem Register den Schutz OHNE PASSWORTEINGABE aufheben. Was mache ich falsch?
Vielen Dank schonmal für Eure Hilfe!
Holger
Und hier der Code:

Sub Workbook_Open()
Dim i As Long
Dim dummy As String
For i = 1 To Worksheets.Count
dummy = Sheets(i).Name
Sheets(dummy).Activate
ActiveSheet.Unprotect Password:="test"
Sheets(i).Protect userinterfaceonly:=True
Sheets(i).EnableOutlining = True 'für Gliederung
Sheets(i).EnableAutoFilter = True 'für Autofilter
ActiveSheet.Protect Password:="test"
Next i
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Problem mit protect / unprotect
14.12.2017 15:49:12
STeve
Hi Holger..........so?
Sub Workbook_Open()
Dim i As Long
Dim dummy As String
For i = 1 To Worksheets.Count
dummy = Sheets(i).Name
Sheets(dummy).Activate
ActiveSheet.Unprotect Password:="test"
Sheets(i).EnableOutlining = True 'für Gliederung
Sheets(i).EnableAutoFilter = True 'für Autofilter
Sheets(i).Protect Password:="test", UserInterfaceOnly:=True
Next i
End Sub

Anzeige
AW: VBA-Problem mit protect / unprotect
14.12.2017 17:49:03
Holger
Hallo STeve,
super, ja, das war es. Das userinterfaceonly muss als Option beim protect-Befehl rein. Klappt jetzt! Vielen Dank für die schnelle Hilfe!
Viele Grüße, Holger
AW: VBA-Problem mit protect / unprotect
14.12.2017 20:27:40
Luschi
Hallo STeve,
dieses Konstrukt

For i = 1 To Worksheets.Count
dummy = Sheets(i).Name
kann mächtig in die Hose gehen, sobald noch andere Tabellenblatttypen (Diagrammblatt, Makroblatt usw.)
mit im Spiel sind. Dann ist der Worksheet-Index und der Sheet-Index nicht das gleiche.
Deshalb so:

Dim ws as Worksheet
For Each ws in Thisworkbook.Worksheets
ws.Activate
'bzw. gleich
ws.Protect ...
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA-Problem mit protect / unprotect
15.12.2017 10:23:15
STeve
Hi Luschi...Danke für deinen Beitrag/Unterstützung. Saubere Referenzierung wie von dir angegeben ist natürlich perfekt.
@ Holger....solltest auf alle Fälle so umschreiben.
Mfg STeve
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Problem mit Protect und Unprotect in Excel lösen


Schritt-für-Schritt-Anleitung

Um den Schutz von Arbeitsblättern in Excel über VBA zu steuern, kannst Du den folgenden Code verwenden. Dieser Code entfernt beim Öffnen des Arbeitsbuchs den Passwortschutz, nimmt Änderungen vor und aktiviert den Schutz anschließend wieder:

Sub Workbook_Open()
    Dim i As Long
    Dim dummy As String
    For i = 1 To Worksheets.Count
        dummy = Sheets(i).Name
        Sheets(dummy).Activate
        ActiveSheet.Unprotect Password:="test" ' Passwort zum Entsperren
        Sheets(i).EnableOutlining = True ' für Gliederung
        Sheets(i).EnableAutoFilter = True ' für Autofilter
        Sheets(i).Protect Password:="test", UserInterfaceOnly:=True ' Passwortschutz wieder aktivieren
    Next i
End Sub

Achte darauf, dass Du das Passwort entsprechend anpasst. Der Parameter UserInterfaceOnly sorgt dafür, dass die Benutzer weiterhin die Gliederung und Autofilter verwenden können, während der Blattschutz aktiv bleibt.


Häufige Fehler und Lösungen

  1. Fehler: Der Blattschutz kann ohne Passworteingabe aufgehoben werden.

    • Lösung: Stelle sicher, dass der Parameter UserInterfaceOnly beim Protect-Befehl korrekt gesetzt ist.
  2. Fehler: Das Skript funktioniert nicht für alle Arbeitsblätter.

    • Lösung: Verwende eine saubere Referenzierung für die Arbeitsblätter, um Probleme mit verschiedenen Blattarten zu vermeiden. Beispiel:
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
       ws.Activate
       ws.Unprotect Password:="test"
       ws.Protect Password:="test", UserInterfaceOnly:=True
    Next ws

Alternative Methoden

Es gibt verschiedene Möglichkeiten, den Schutz von Arbeitsblättern zu steuern:

  • Verwende Excel-Formeln, um z.B. bestimmte Zellen zu schützen.
  • Nutze die Excel-Oberfläche unter "Überprüfen" > "Blatt schützen", um den Schutz manuell zu setzen.
  • Setze VBA-Events, um den Schutz automatisch zu verwalten, z.B. beim Schließen der Arbeitsmappe.

Praktische Beispiele

  1. Einfacher Blattschutz ohne Passwort:
ActiveSheet.Protect
  1. Blatt mit Passwort schützen:
ActiveSheet.Protect Password:="deinPasswort"
  1. Aktives Blatt wieder entsperren:
ActiveSheet.Unprotect Password:="deinPasswort"

Diese Beispiele zeigen, wie Du mit activesheet.protect und activesheet.unprotect in VBA arbeiten kannst.


Tipps für Profis

  • Nutze UserInterfaceOnly beim Blattschutz, um Anpassungen im VBA zu ermöglichen, während Benutzer weiterhin die Benutzeroberfläche nutzen können.
  • Halte den Passwortschutz einfach und dokumentiere Deine Passwörter sicher.
  • Verwende Kommentare im Code, um die Funktionalität zu erklären, besonders wenn Du mit mehreren Blättern arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich ein Arbeitsblatt ohne Passwort schützen?
Du kannst ein Arbeitsblatt einfach mit ActiveSheet.Protect schützen, ohne ein Passwort anzugeben.

2. Was macht der Parameter UserInterfaceOnly?
Dieser Parameter ermöglicht es, dass das Arbeitsblatt durch VBA bearbeitet werden kann, während es für Benutzer weiterhin geschützt ist.

3. Warum funktioniert mein VBA-Code nicht für alle Arbeitsblätter?
Wenn Du unterschiedliche Blattarten (z.B. Diagrammblätter) in Deiner Arbeitsmappe hast, solltest Du die Referenzierung in Deinem Code anpassen, um sicherzustellen, dass Du nur mit Arbeitsblättern arbeitest.

4. Wie kann ich ein Arbeitsblatt wieder entsperren?
Verwende ActiveSheet.Unprotect Password:="deinPasswort", um das Blatt wieder zu entsperren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige