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

Workbook_SheetChange触发Run-Time Error 1004问题求助

解决Workbook_SheetChange复制粘贴时的1004错误

原代码触发错误的核心原因有两点:

  • 修改单元格内容会再次触发SheetChange事件,引发循环调用导致报错
  • 未正确引用触发事件的工作表,且Intersect中的Range未指定所属工作表,跨表操作时会出现对象引用混乱

修正后的代码如下:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' 禁用事件,避免修改单元格时重复触发事件
    Application.EnableEvents = False
    
    On Error GoTo ErrorHandler ' 捕获错误,确保事件能恢复
    
    ' 检查变更区域是否和当前工作表的A1:D1不重叠
    If Intersect(Target, Sh.Range("A1:D1")) Is Nothing Then
        ' 直接使用传入的Sh对象引用工作表,避免ActiveSheet的不确定性
        Sh.Range("B1").Value = Format(Now(), "dd/mm/yyyy - hh:mm:ss")
        Sh.Range("D1").Value = Application.UserName
    End If

ErrorHandler:
    ' 无论是否出错,都恢复事件触发
    Application.EnableEvents = True
    If Err.Number <> 0 Then
        MsgBox "操作出错:" & Err.Description, vbExclamation
    End If
End Sub

关键修改点说明

  • 禁用事件触发:在修改单元格前设置Application.EnableEvents = False,防止修改B1/D1时再次触发SheetChange事件,避免循环调用导致的1004错误
  • 正确引用工作表:全程使用事件参数传入的Sh对象,替代ActiveSheet,确保跨表操作时始终操作触发变更的工作表
  • 指定Range所属工作表:Intersect中使用Sh.Range("A1:D1"),明确引用当前触发事件的工作表的区域,避免对象引用错误
  • 错误捕获:添加On Error语句,确保即使出现其他错误,事件触发也能恢复,避免后续操作无法触发事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:02:39