Чтобы убедиться, что произошло истинное изменение, мы сначала сохраняем значение выбранной ячейки в качестве публичной переменной. Поскольку вы можете выбрать более одной ячейки одновременно, я решил использовать общедоступную коллекцию.
Затем, когда происходит изменение, мы сравниваем новое значение этой ячейки со старым значением в коллекции и только если они не совпадают, очищают содержимое AQ. Что-то вроде:
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
Редактирование обновлено для работы при выборе нескольких ячеек.
Очевидно, что если вы измените значение Range("D7:D506")
без фактического выбора ячейки, этот код выдаст ошибку.
Если подумать, вы можете редактировать несколько ячеек одновременно, если удаляете значение. Тогда этот код также выдаст ошибку. Но мы можем обойти это, используя тот же подход, Worksheet_Change
что и в 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