Clever-Excel-Forum

Normale Version: Gruppierung unter Blattschutz trotzdem öffnen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community,

ich habe eine sehr große Datei, in der ich jetzt einen Blattschutz aktivieren möchte.

Sobald ich diesen aktiviere, lassen sich jedoch nicht mehr die Gruppierungen öffnen. Daraufhon habe ich mir folgenden VBA gegoogelt.

Sub Workbook_Open()
ActiveSheet.Protect userinterfaceonly:=True, Password:="Passwort"
ActiveSheet.EnableOutlining = True 'für Gliederung
ActiveSheet.EnableAutoFilter = True 'für Autofilter
End Sub

Das Problem ist gelöst, jedoch immer nur auf einem Arbeitsblatt. Ich möchte das jedoch auf mehreren Arbeitsblätter verwenden. Muss ich den Code dann woanders eingeben?
Habe diesen jetzt bei "dieser Arbeitsmappe" hinterlegt.

MfG
Matze
Hallo,

mach eine Schleife über alle Worksheets ...


Code:
Sub Workbook_Open()
Dim WS as Worksheet

For Each WS in Worksheets
   With WS
      .Protect userinterfaceonly:=True, Password:="Passwort"
      .EnableOutlining = True 'für Gliederung
      .EnableAutoFilter = True 'für Autofilter
   End With
End Sub
Hallo Sabrina,

vielen Dank für deine Hilfe. Morgen werde ich dein VBA ausprobieren. Eine Frage habe ich dennoch. 
Auf welchen Arbeitsblatt muss ich das eingeben? 
In jedem wo es gelten soll oder in "Dieser Arbeitsmappe"?


MfG
Matze
Hallo Matze

Workbook open gehört nur in " Diese Arbeitsmappe"
Hallo Sabrina.

Ich erhalte eine Fehlermeldung " Fehler beim Kompilieren: For ohne Next"

Was ist damit gemeint?

MfG
Matze
Hallo Matze,

da fehlt einfach nur ein Next

Code:
Sub Workbook_Open()
Dim WS As Worksheet

For Each WS In Worksheets
  With WS
     .Protect userinterfaceonly:=True, Password:="Passwort"
     .EnableOutlining = True 'für Gliederung
     .EnableAutoFilter = True 'für Autofilter
  End With

Next
 
End Sub

Damit sollte es gehen

MfG Gimpi
Eine Anschlussfrage ergibt sich für mich noch.

Wenn ich nun meinen Blattschutz für alle Arbeitsblätter gleichzeitig aktivieren bzw deaktivieren möchte, gibt es dazu auch ein VBA.

Habe dazu folgendes gefunden.


Code:
Option Explicit
Dim WsTabelle As Worksheet

Private Sub Aufheben()
    For Each WsTabelle In Sheets
        WsTabelle.Unprotect ("Passwort")
    Next WsTabelle
End Sub

Private Sub Schutz()
    For Each WsTabelle In Sheets
        WsTabelle.Protect ("Passwort")
    Next WsTabelle
End Sub

Folgendes Makro habe ich in "Dieser Arbeitsmappe" schon hinterlegt.

Sub Workbook_Open()
Dim WS As Worksheet
For Each WS In Worksheets
   With WS
      .Protect userinterfaceonly:=True, Password:="Matrix2019"
      .EnableOutlining = True 'für Gliederung
      .EnableAutoFilter = True 'für Autofilter
   End With
Next WS
End Sub

Meine Frage: Wo bzw. wie füge ich den oberen Code in den bestehenden ein, sodass alles funktioniert?

MfG
Matze
Hallo,

wieso gleichzeitig aktivieren und deaktivieren?

Code:
Sub Workbook_Open()
Dim WS As Worksheet

For Each WS In Worksheets
  With WS
     .Protect userinterfaceonly:=True, Password:="Passwort"
     .EnableOutlining = True 'f?r Gliederung
     .EnableAutoFilter = True 'f?r Autofilter
     .Unprotect Password:="Passwort"
  End With

Next
  
End Sub
Hey,

ja das ist natürlich nicht sinnvoll.

Mein Gedanke war/ist, dass ich durch die Eingabe eines Passwortes zeitgleich alle Arbeitsblätter mit einem Schutz versehen.
Ebenfalls soll es aber auch möglich sein, den Schutz aller Arbeitsblätter wieder aufzuheben, wenn man einamlig das Passwort eingibt.
Bei 15 Arbeitsblätter wäre es sehr aufwendig, dass bei jedem Arbeitsblatt separat zu machen

MfG
Matze
Hallo,

meinst Du so?

Code:
Sub prcTabellenschutz()
   Dim WS As Worksheet
   Dim strPasswort As String
  
   'inputbox f?r die Passwortabfrage
   strPasswort = InputBox("Geben Sie ein Passwort ein", "Passwortabfrage")
   'falls das Paswort nicht aus einen Leerstring besteht
   If strPasswort <> "" Then
      'durchlauf alle Tabellenbl?tter
      For Each WS In Worksheets
         With WS
            'Abfrage ob das Tabellenblatt gesch?tzt ist
            If Not .ProtectContents Then
               'wenn nein, sch?tze das Tabellenblatt
               .Protect userinterfaceonly:=True, Password:=strPasswort
               .EnableOutlining = True 'f?r Gliederung
               .EnableAutoFilter = True 'f?r Autofilter
            Else
               'wenn ja, entferne den Schutz
               .Unprotect Password:=strPasswort
            End If
         End With
      Next
   End If
End Sub