You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除行时忽略Worksheet_Change事件 避免时间戳自动刷新的VBA问题

问题原因

删除整行时,下方行内容会上移填充空缺,Excel会判定上移的B列单元格发生了内容变更,触发Worksheet_Change事件,导致对应时间戳被意外刷新。

修复后代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WorkRng As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer
    
    ' 判断当前操作是否为删除行,是则直接退出不执行后续逻辑
    If Application.CommandBars("Standard").Controls("&Undo").List(1) Like "删除*行" Then
        Exit Sub
    End If
    
    Set WorkRng = Intersect(Me.Range("B:B"), Target)
    xOffsetColumn = 1
    If Not WorkRng Is Nothing Then
        Application.EnableEvents = False
        For Each Rng In WorkRng
            If Not VBA.IsEmpty(Rng.Value) Then
                Rng.Offset(0, xOffsetColumn).Value = Now
                Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
            Else
                Rng.Offset(0, xOffsetColumn).ClearContents
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub

调整说明

  • 新增删除行操作校验逻辑:通过读取Excel撤销菜单的最近操作记录,识别到删除行操作时直接终止事件执行,不会误更新时间戳
  • 优化工作表引用:将原代码的Application.ActiveSheet替换为Me,Me指代当前代码所属的工作表,避免触发事件时切换到其他工作表导致逻辑异常
  • 原有编辑B列单元格自动生成、清除时间戳的逻辑完全保留,不影响原有使用习惯

注意事项

若使用英文版Excel,请将删除行判断语句修改为:

If Application.CommandBars("Standard").Controls("&Undo").List(1) Like "Delete *Row" Then

内容的提问来源于stack exchange,提问作者bagofdoom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:06:06