Zellen ausblenden trotz Sperre
#1
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
Antworten Top
#2
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
...
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
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"
Antworten Top
#4
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
(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?
Antworten Top
#6
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").
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • mauritius5
Antworten Top
#7
(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!
Antworten Top


Gehe zu:


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