Вы должны использовать Target
вместо ActiveCell
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Interior.ColorIndex = 44 Then
Target.Offset(ColumnOffset:=4).Value = "Done " & Date
End If
End Sub
Обратите внимание, что это не может проверить, был ли цвет изменен или нет, поскольку для этого нет события.Вы можете только проверить, если фактический индекс цвета равен 44. Но чтобы предотвратить перезапись даты «изменения», вы можете просто проверить, существует ли уже дата.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Rows.Count + Target.Columns.Count > 2 Then Exit Sub 'exit if more than one cell is selected
If Target.Interior.ColorIndex = 44 And Not Left$(Target.Offset(ColumnOffset:=4).Value, 4) = "Done" Then
Target.Offset(ColumnOffset:=4).Value = "Done " & Date
End If
End Sub