AW: Zellen mit VBA sperren und entsperren
30.08.2013 11:40:35
Bastian
Hallo Justi,
hier mal ein Code, bei dem egal ist, wo die Kontrollzellen sind.
Du musst den Code (ab Option Explicit) ins Codefenster der Tabelle1 kopieren: Rechter Mausklick auf Tabelle1 => Code anzeigen.
Das Makro funktioniert etwa so:
Ausgangssituation: Blattschutz eingeschaltet, aber alle Zellen entsperrt.
Sobald in eine beliebige Zelle in "Tabelle1" in Range("A:P") (musst Du an zwei Stellen im Code anpassen) ein "C" eingegeben wird, werden die 3. und 4. Zelle links davon gesperrt.
Sobald versucht wird, eine Zelle mit einem "C" drin zu überschreiben, wird ein Passwort abgefragt (z.Z. "1234"). Auch dieses kannst Du im Code anpassen. Bei falschem Passwort bleibt das "C" in der Zelle und die Zellen relativ dazu gesperrt
Das "C" wird klein- oder großgeschrieben akzeptiert.
Option Explicit
Dim strAlterWert As String
Dim strPasswort As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "C" Or Target.Value = "c" Then
ActiveSheet.Unprotect
Target.Offset(0, -3).Locked = True
Target.Offset(0, -4).Locked = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
If strAlterWert = "C" Or strAlterWert = "c" Then
strPasswort = InputBox("Bitte Passwort eingeben")
Select Case strPasswort
Case "1234"
ActiveSheet.Unprotect
Target.Offset(0, -3).Locked = False
Target.Offset(0, -4).Locked = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Case Else
Application.EnableEvents = False
Target.Value = strAlterWert
Application.EnableEvents = True
Exit Sub
End Select
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
strAlterWert = Target.Value
End Sub
Hier nochmal die Zeilen, die angepasst werden müssen:
An zwei Stellen der Bereich, für den das Makro gültig sein soll:
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
Und das Passwort:
Case "1234"
Gruß, Bastian