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.

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