Как насчет этого:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myTableRange As Range, IntSectRange As Range, TargetVal As String
Set myTableRange = Range("A2:B" & Cells(Rows.Count, 2).End(xlUp).Row) 'Change to your range..
Set IntSectRange = Intersect(Target, myTableRange)
If IntSectRange Is Nothing Then
Exit Sub
Else
If IntSectRange.Cells.Count = 1 Then 'Thus when only one cell gets changed
With Application
.ScreenUpdating = False
.EnableEvents = False
.Undo
TargetVal = Target.Value
.Undo
If Target.Value <> TargetVal Then
'Your Code doing something with timestamp
Debug.Print Target.Value
End If
.EnableEvents = True
.ScreenUpdating = True
End With
Else 'Thus when there are more cells involved (bulk)
'Your Code doing something with timestamp
End If
End If
End Sub
Код сначала проверяет, пересекается ли диапазон, если это так, отменяет последнее действие пользователя, проверяет его значение, повторяет действие пользователя и проверяет, было ли введено новое значение.или удаленное значение.
Возможно, вы захотите добавить еще один тест для строк (динамический myTableRange
), если пользователь удалит сразу всю строку, что приведет к ошибке.