Vba Excel工作表\u删除行时触发的更改事件

Vba Excel工作表\u删除行时触发的更改事件,vba,excel,event-handling,Vba,Excel,Event Handling,我有一个excel工作表,其中包含一些vba代码,当我更改特定单元格时,它会自动将今天的日期设置到它旁边的单元格中 这一切都很好,但当我删除特定单元格上方的整行时,它会自动将日期更改为今天的日期 这是我用来自动更改单元格的代码: Private Sub Worksheet_Change(ByVal Target As Range) Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = In

我有一个excel工作表,其中包含一些vba代码,当我更改特定单元格时,它会自动将今天的日期设置到它旁边的单元格中

这一切都很好,但当我删除特定单元格上方的整行时,它会自动将日期更改为今天的日期

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

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

有人熟悉这个问题吗?

您可以在范围
目标
上进行一些测试,以避免执行代码
(使用
Goto
或更确切地说
Exit Sub
):

  • Target.Cells.Count>1
  • Target.Rows.Count>1
  • Target.Columns.Count>1
您可以在Sub开始时使用这些测试,或者使用
,如果不工作则不算什么

因此,您的代码可以是:

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
很高兴我能帮忙!;)@格拉夫