Zellschutz Meldung unterdrücken - durch Undo
Beate
Hallo Andreas,
eine etwas schrille Idee: setze ein Undo-Makro ein. D.h. jedwede Änderung wird einfach nicht ausgeführt, es erfolgt aber auch keine Meldung, das Blatt braucht nicht geschützt zu werden. Hier mal ein paar Beispiele für Zellen bzw. Bereiche, dann kann du mal testen, ob das eine Lösung für dich ist. Das Makro gehört ins Codefenster der Tabelle:
Diese Lösung ruft nach jeder Änderung des Blattes die Undo - Funktion auf. Damit wird die Änderung rückgängig gemacht. Dies funktioniert natürlich nur bei aktivierten Makros.
Private Sub Worksheet_Change( ByVal Target As Excel.Range)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End Sub
Quelle mit Dankeschön: http://www.Russi.de.tt
Eine Erweiterung könnte man machen, indem man über If nur einzelne Zellen/Spalten/Zeilen/Bereiche so schützt - und somit ist dies auch eine gute Möglichkeit mehrere Bereiche in einem Blatt zu schützen ohne Blattschutz zu aktivieren.
Beispiel für Schutz von Zelle H5:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$H$5" Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
Beispiel für Schutz von Bereich A1:D10:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <= 4 And Target.Row <= 10 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Beispiel für Schutz von Spalte C:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 3 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
Beispiel Zellschutz mit Undo für A1 - wenn man aber in B1 eine 1 eingibt, können dort Änderungen vorgenommen werden:
setze folgendes Makro ins Codefenster der Tabelle (dabei liegt das zu schützende Gültigkeitsdropdown in Zelle A1 - anpassen!):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
If Range("B1").Value <> 1 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End If
End Sub
Blattschutz braucht nicht gesetzt zu werden, dieses Makro stellt nach dem Versuch, die Auswahl in A1 zu ändern, den vorherigen Zustand wieder her.
Will man die Zelle A1 bewußt ändern, muss man in B1 eine 1 eingeben. Für diesen Zweck kann man ja auch eine "verstecktere" Zelle vorsehen.
Gruß,
Beate