Clever-Excel-Forum

Normale Version: VBA Blattschutz
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo an alle hier im Forum

Ich bräuchte Eure Hilfe zum Thema Blattschutz.

Ich habe eine Tabelle, in der festgelegt wird, welches Blatt geschützt werden soll.

Folgenden Code habe ich für den Superadmin und Admin, der auch funzt.
Code:
Sub Workbook_Open()
Dim ws As Worksheet
   
If Worksheets("Hilfstabelle").Range("D75").Value = "Superadmin" Or Worksheets("Hilfstabelle").Range("D75").Value = "Admin" Then
    For Each ws In Worksheets
        'ws.Protect Sheets("Einstellungen").Range("P19").Value
        ws.Unprotect Sheets("Einstellungen").Range("P19").Value
    Next ws
    End If
End Sub

Jetzt gibt es noch den Manager und den Benutzer
Das wollte ich mit einem Array lösen, was allerdings nicht funzt
Code:
Dim varSheets As Variant 'Blattschutz
Dim varItem As Variant 'Blattschutz

varSheets = Array("Tabelle2", "Tabelle1", "Tabelle62", "Tabelle63")
For Each varItem In varSheets
ThisWorkbook.Worksheets(varItem).Protect Passwort:=Sheets("Einstellungen").Range("P19").Value
Next varItem
Das ist das Passwort!   Seets("Einstellungen").Range("P19").Value

meine Vorstellung wäre so:

Code:
varSheets = Array(" Sheets("Einstellungen").Range("Q22").Value ", " Sheets("Einstellungen").Range("Q239").Value ", " Sheets("Einstellungen").Range("Q24").Value ", "usw")

Die Range kommen aus einer Tabelle, wo =WENN($P22="x";"";"Tabelle65") als Formel steht

also wenn ein x dann Tabellennummer in Array setzen

Danke und ich hoffe, es ist etwas verständlich
Hi,

nun ja, du solltest bei der Definition des Arrays deine xxx.Value nicht in Anführungszeichen setzen. ;)

Und dann musst du innerhalb der For-Each-Schleife natürlich noch prüfen, ob dein varIten auch einen Wert hat oder vielleicht nicht doch "" ist. Denn Sheets("") ergibt einen Fehler.
Mein jetziger Code, der allerdings einen Fehler hat.
Code:
Sub Workbook_Open()
Dim ws As Worksheet
Dim arrProtect, wks As Worksheet 'Blattschutz

If Worksheets("Hilfstabelle").Range("D75").Value = "Superadmin" Or Worksheets("Hilfstabelle").Range("D75").Value = "Admin" Then
    For Each ws In Worksheets
        'ws.Protect Sheets("Einstellungen").Range("P19").Value
        ws.Unprotect Sheets("Einstellungen").Range("P19").Value
    Next ws
    End If
   
    'Statistiken schützen
   
  arrProtect = Array(Tabelle2, Tabelle1, Tabelle62, Tabelle63) 'und so weiter
  For Each wks In Worksheets
    If Not IsError(Application.Match(wks.Name, arrProtect, 0)) Then ' Hier ist der Fehler!
  '    'wks.Protect ("trallala")
       wks.Protect Sheets("Einstellungen").Range("P19").Value
    End If
  Next wks

   
End Sub
Das ist die Formel zum festlegen der Sperren der einzelnen Blätter: =WENN($P22="x";"Tabelle65";"")

in diesem Fall soll er Tabelle65 sperren

Aber irgendwie komme ich nicht weiter.
Hallöchen,

versuch's mal im Prinzip so Smile

arrProtect = Array(Tabelle1.CodeName, Tabelle2.CodeName)
...
If Application.Match(wks.CodeName, arrProtect(), 0) Then
Objektvariable nicht festgelegt lautet der Fehler!
Hab es erstmal wie folgt gelöst, ist allerdings nicht wirklich die opimale Lösung!
Code:
'KW-Wochen schützen
If Worksheets("Hilfstabelle").Range("D75").Value = "Benutzer" And Worksheets("Einstellungen").Range("S32").Value <> "" Then
   For iWks = 11 To 66
      Worksheets(iWks).Protect Worksheets("Einstellungen").Range("P19").Value
   Next iWks
End If