Clever-Excel-Forum

Normale Version: Zellen ausblenden trotz Sperre
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B4:B6")) Is Nothing Then
    With Worksheets("Besuch - Visite - Visita")
'1'
        .Rows(50).Hidden = Range("B4") = Range("C4") Or Range("B4") = Range("E4") Or Range("B4") = Range("G4")
'2'
        .Range("A34, A51, A97").EntireRow.Hidden = Range("B4") = Range("D4") Or Range("B4") = Range("F4") Or Range("B4") = Range("H4")
'3'
        .Range("A16, A86, A96").EntireRow.Hidden = Range("B5") = Range("D5") Or Range("B5") = Range("F5") Or Range("B5") = Range("H5")
'4'
        .Rows(33).Hidden = Range("B4") = Range("C4") Or Range("B4") = Range("E4") Or Range("B4") = Range("G4") Or Range("B5") = Range("D5") Or Range("B5") = Range("F5") Or Range("B5") = Range("H5")
'5'
        .Rows(17).Hidden = Range("B5") = Range("C5") Or Range("B5") = Range("E5") Or Range("B5") = Range("G5") Or Range("B6") = Range("C6") Or Range("B6") = Range("E6") Or Range("B6") = Range("G6")
'6'
        .Range("A52, A85").EntireRow.Hidden = Range("B5") = Range("D5") Or Range("B5") = Range("F5") Or Range("B5") = Range("H5") Or Range("B6") = Range("D6") Or Range("B6") = Range("F6") Or Range("B6") = Range("H6")
    End With
End If
If Not Intersect(Target, Range("B16")) Is Nothing Then
    With Worksheets("Besuch - Visite - Visita")
'7'
        .Rows("156:166").Hidden = Range("B16") = Range("D16") Or Range("B16") = Range("G16") Or Range("B16") = Range("J16") Or Range("B16") = Range("E16") Or Range("B16") = Range("H16") Or Range("B16") = Range("K16")
    End With
End If
End Sub

Liebe Leute

Wenn ich mein Sheet sperre, kann der obige Code nicht mehr ausgeführt werden, da das Ausblenden der Zeilen dann nicht mehr geht.
Meine Frage nun, wie ich das Entsperren und das erneute Sperren in diesen Code integrieren kann.

Wichtig wäre, dass das Sheet vor jeder Nummer (1-7) einzeln entsperrt und nach der Nummer wieder gesperrt wird.
Mit ActiveSheet.Unprotect und danach wieder Protect klappt es leider nicht.

Habt ihr eine Idee?

Herzlichen Dank und Gruss
mauritius5
Hi,

ActiveSheet ist idR eine schlechte Wahl. Wer garantiert dir, dass dies das Sheet ist, das du haben willst?

Da du doch soweiso With-Blöcke mit den Sheets hast, setze innerhalb der Blöcke als ersten Befehl .UnProtect und als letzten .Protect:

Code:
...
    With Worksheets("Besuch - Visite - Visita")
        .UnProtect "Passwort"
        ...
        .Protect "Passwort"
    End With
...
Peeerfekt, dies klappt schonmal super. Vielen, vielen Dank!!!

Ich Sheet habe ich nun noch Signaturzeilen, die nach dem Sperren nicht mehr ausfüllbar sind. Ich habe es mit folgendem Code versucht, welcher allerdings nicht klappt.
Habt ihr eine Idee, wie ich den Code hierfür gestalten müsste?

ActiveSheet.Protect DrawingObjects:=False Password:="abc"
Hi,

wenn du uns verrätst, was du mit "Signaturzellen" meinst, dann kann man dir sicherlich helfen...
Einfacher wird es übrigens, wenn man eine Exceldatei hat, mit der man seine Versuche testen kann.

PS: Verzichte auf ActiveSheet. Wie schon erwähnt kann man sich nie sicher sein, ob dies das Blatt ist, das man haben will.
(07.02.2023, 16:41)HKindler schrieb: [ -> ]Hi,

wenn du uns verrätst, was du mit "Signaturzellen" meinst, dann kann man dir sicherlich helfen...
Einfacher wird es übrigens, wenn man eine Exceldatei hat, mit der man seine Versuche testen kann.

PS: Verzichte auf ActiveSheet. Wie schon erwähnt kann man sich nie sicher sein, ob dies das Blatt ist, das man haben will.

Es hat geklappt mit ActiveSheet.Protect DrawingObjects:=False, Password:="abc"
Hab das "Komma" vergessen.

Bezgl. ActiveSheet.Protect:
Ich weiss nicht weshalb, aber wenn ich hier nur .Protect... nehme, gibts mir eine Fehlermeldung.
Woran könnte dies liegen?
Hi,

.Protect ist eine Methode des Worksheet-Objekts. Ein Worksheet musst du schon mit angeben. Das hat vorher funktioniert, weil du einen With-Block mit einem Worksheet hattest. Wenn du es innerhalb eines Worksheet-Events wie z.B. Worksheet_Cange verwendest, dann reicht Me.Protect. Ansonsten musst du schon ein Worksheet voran stellen. Aber nach Möglichkeit halt nicht ActiveSheet sondern z.B. Worksheets("gewünschterBlattname").
(07.02.2023, 21:25)HKindler schrieb: [ -> ]Hi,

.Protect ist eine Methode des Worksheet-Objekts. Ein Worksheet musst du schon mit angeben. Das hat vorher funktioniert, weil du einen With-Block mit einem Worksheet hattest. Wenn du es innerhalb eines Worksheet-Events wie z.B. Worksheet_Cange verwendest, dann reicht Me.Protect. Ansonsten musst du schon ein Worksheet voran stellen. Aber nach Möglichkeit halt nicht ActiveSheet sondern z.B. Worksheets("gewünschterBlattname").

Alles klar, ich danke dir vielmals für die Erläuterung!