删除行时Excel Worksheet_Change事件触发

我有一个Excel工作表与一些VBA代码,当我改变一个特定的单元格,它会自动将今天的date设置到旁边的单元格。

这一切都很好,但是当我删除整个行上的特定单元格时,它会自动更改date到今天的date。

这是我用来自动更改单元格的代码:

Private Sub Worksheet_Change(ByVal Target As Range) Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.Sheets("Example").Range("H10: H306, M10: M306, R10: R306, W10: W306, AB10: AB306, AG10: AG306"), Target) xOffsetColumn = 1 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Sheets("Example").Unprotect Rng.Offset(0, xOffsetColumn).Value = Now Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" Sheets("Example").Protect Else Rng.Offset(0, xOffsetColumn).ClearContents End If Next Application.EnableEvents = True End If End Sub 

有人熟悉这个问题吗?

你可以在Range Target上做一些testing,以避免执行代码
(与GotoExit Sub ):

  • Target.Cells.Count > 1
  • Target.Rows.Count > 1
  • Target.Columns.Count > 1

您可以在Sub的开始处使用这些testing,或者If Not WorkRng Is Nothing Then

所以你的代码可能是:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer If Target.Columns.Count > 1 Then Exit Sub Set WorkRng = Intersect(Application.Sheets("Example").Range("H10: H306, M10: M306, R10: R306, W10: W306, AB10: AB306, AG10: AG306"), Target) xOffsetColumn = 1 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Sheets("Example").Unprotect Rng.Offset(0, xOffsetColumn).Value = Now Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" Sheets("Example").Protect Else Rng.Offset(0, xOffsetColumn).ClearContents End If Next Application.EnableEvents = True End If End Sub