删除行时忽略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
相关产品推荐
相关产品推荐

