Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Blattschutz
#1
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
Antworten Top
#2
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
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.
Antworten Top
#4
Hallöchen,

versuch's mal im Prinzip so Smile

arrProtect = Array(Tabelle1.CodeName, Tabelle2.CodeName)
...
If Application.Match(wks.CodeName, arrProtect(), 0) Then
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Objektvariable nicht festgelegt lautet der Fehler!
Antworten Top
#6
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste