【问题标题】:Excel Worksheet_Change event triggering when deleting row删除行时触发 Excel Worksheet_Change 事件
【发布时间】:2017-03-08 08:07:23
【问题描述】:

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

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

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

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

有人熟悉这个问题吗?

【问题讨论】:

    标签: vba excel event-handling


    【解决方案1】:

    您可以对 Range Target 进行一些测试,以避免执行代码
    Goto 或更确切地说是Exit Sub):

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

    您可以在 Sub 开头或 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
    

    【讨论】:

    • 很高兴我能帮上忙! ;) @Graaf
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多