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

检测到单元格变更生成日期戳的VBA脚本多单元格修改报错求解

问题根因

你遇到的运行时错误核心是修改C列单元格的操作会再次触发Worksheet_Change事件,形成无限递归调用:单单元格修改时递归层级较低可能偶发不报错,多单元格批量修改时递归次数陡增,直接触发运行时栈溢出错误。

修正后代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim intersectRng As Range
    
    ' 先判断修改区域是否和E列有交集,无交集直接退出
    Set intersectRng = Intersect(Target, Me.Range("E:E"))
    If intersectRng Is Nothing Then Exit Sub
    
    ' 错误处理:无论中间是否出错,最终都要恢复事件触发和工作表保护
    On Error GoTo ErrHandler
    
    ' 禁止事件触发,避免递归
    Application.EnableEvents = False
    ' 解锁工作表,Me直接指代当前代码所在的工作表,无需额外定义变量
    Me.Unprotect "Abc123"
    
    For Each cell In intersectRng
        If cell.Value <> "" Then
            Me.Cells(cell.Row, "C").Value = Now
        Else
            Me.Cells(cell.Row, "C").Value = ""
        End If
    Next cell

ErrHandler:
    ' 恢复工作表保护
    Me.Protect "Abc123"
    ' 恢复事件触发,必须执行否则Excel全局事件会失效
    Application.EnableEvents = True
    ' 有错误的话提示错误信息
    If Err.Number <> 0 Then MsgBox "运行错误:" & Err.Description
End Sub

改动说明

  • 新增交集判断:仅当修改区域包含E列单元格时才执行后续逻辑,减少不必要的性能消耗
  • 新增Application.EnableEvents开关:写入C列时禁止事件触发,从根源避免递归调用
  • 新增错误处理机制:即使执行过程中出现异常,也能正常恢复工作表保护和Excel全局事件触发能力,不会出现后续事件全部失效的问题
  • 用Me指代当前代码所在的工作表,无需依赖额外定义的wstextsubmissiontool变量,兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:45:03