1.8k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
ich komme so langsam an meine Excel Grenzen und bräuchte ganz dringend Hilfe. Ich habe eine Tabelle. Wenn in Zelle E4 etwas eingegeben wird, sollen die Zellen F4 und G4 gesperrt werden. Wenn in Zelle F4 etwas geschrieben wird, sollen die Zellen E4 und G4 gesperrt werden und wenn in G4 etwas steht, dann sollen die Zellen E4 und F4 gesperrt werden. Das gleiche soll dann auch für die Zeilen darunter gelten, jedoch immer für jede Zeile separat: Also wenn in E5 etwas steht, müssen F5 und G5 gesperrt werden, wenn in F5..., wenn in E6.....
Danach muss ich das Tabellenblatt so sperren, dass nicht nur das Blatt, sondern auch die Entwicklertools mit einem Passwort geschützt sind.
Ich hoffe ihr könnt mir weiter helfen. Wäre Euch so dankbar!

4 Antworten

0 Punkte
Beantwortet von miries Einsteiger_in (25 Punkte)
Also vielleicht mal als kleiner Anreiz. Ich habe folgenden Code. Der funktioniert aber leider nur in einer Zeile. Was mache ich falsch?
FYI: In der Tabelle kann nicht der ganze Zellschutz aufgehoben werden, da manche Zellen immer gesperrt sein sollen. Wäre super, wenn mir jemand einen Tipp geben könnte...
Hier der bisherige Code:

Private Sub Worksheet_Calculate()

If Range("D4").Value <> "" Then
Range("E4").Locked = True
Range("F4").Locked = True

If Range("E4").Value <> "" Then
Range("D4").Locked = True
Range("F4").Locked = True

If Range("F4").Value <> "" Then
Range("E4").Locked = True
Range("D4").Locked = True

ActiveSheet.Protect Password:="abc"

End If
End Sub
0 Punkte
Beantwortet von
Hallo Mirie,

habe gerade gesehen, dass dieser Punkt noch offen ist. Solltest du nicht inzwischen selbst drauf gekommen sein, hier mein Vorschlag:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 4 Then
a = 5: b = 6
weiter = True
ElseIf Target.Column = 5 Then
a = 4: b = 6
weiter = True
ElseIf Target.Column = 6 Then
a = 4: b = 5
weiter = True
End If

If weiter = True Then
ActiveSheet.Unprotect Password:="abc"
Cells(Target.Row, a).Locked = Target <> ""
Cells(Target.Row, b).Locked = Target <> ""
ActiveSheet.Protect Password:="abc"
End If


End Sub


Der Code ist so aufgebaut, dass du auch nachträglich den Wert woanders hinsetzen kannst, wenn du ihn vorher rauslöschst.

Natürlich sollten vor der ersten Ausführung des Codes die Spalten D bis F komplett unlocked sein.

L.G. Mr. K.
0 Punkte
Beantwortet von
Der Code ist so aufgebaut, dass du auch nachträglich den Wert woanders hinsetzen kannst, wenn du ihn vorher rauslöschst.

Wenn Du das nicht möchtest ersetze Target <> "" einfach durch True
0 Punkte
Beantwortet von
Alternativ kannst du das auch makrofrei über die Datengültigkeit regeln. Gib z.B. in E4 bei Benutzerdefiniert =UND(D4="";F4="") ein und entferne das Häkchen bei Leere Zellen ignorieren. Als Fehlermeldung gibst du z.B. "Zweiter Wert nicht zulässig" an.

Die Gültigkeit lässt sich auch runterkopieren.

L.G. Mr. K.
...