Um sicherzustellen, dass eine echte Änderung stattgefunden hat, speichern wir zuerst den Wert der ausgewählten Zelle als öffentliche Variable. Da Sie mehrere Zellen gleichzeitig auswählen können, habe ich mich für eine öffentliche Sammlung entschieden.
Wenn dann eine Änderung auftritt, vergleichen wir den neuen Wert dieser Zelle mit dem alten Wert in der Auflistung. Nur wenn sie nicht übereinstimmen, löschen Sie den Inhalt von AQ. So etwas wie:
Public coll As New Collection Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim cel As Range Set coll = New Collection If Not Intersect(Target, Range("D7:D506")) Is Nothing Then For Each cel In Target coll.Add cel.Value, cel.Address Next cel End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D7:D506")) Is Nothing Then If Not Target.Value = coll(Target.Address) Then Range("AQ" & Target.Row).ClearContents End If End If End Sub
Die Bearbeitung wurde aktualisiert, wenn mehrere Zellen ausgewählt werden.
Wenn Sie einen Wert ändern, Range("D7:D506")
ohne zuvor die Zelle auszuwählen, wird offensichtlich ein Fehler ausgegeben.
Denken Sie daran, Sie können mehrere Zellen gleichzeitig bearbeiten, wenn Sie den Wert löschen. Dann gibt dieser Code auch einen Fehler aus. Aber wir können das umgehen, indem Worksheet_Change
wir denselben Ansatz verwenden wie in Worksheet_SelectionChange
:
Private Sub Worksheet_Change(ByVal Target As Range) Dim cel As Range If Not Intersect(Target, Range("D7:D506")) Is Nothing Then For Each cel In Target If Not cel.Value = coll(cel.Address) Then Range("AQ" & cel.Row).ClearContents End If Next cel End If End Sub