Excel VBA运行时错误1004:应用程序定义或对象定义错误求助
解决VBA Runtime Error 1004(Application-defined or Object-defined error)问题
常见诱因及对应解决方法
事件循环触发:修改
AC/AD列单元格时,会再次触发Worksheet_Change事件,递归调用引发错误。
解决:操作前禁用事件,完成后恢复:Application.EnableEvents = False ' 执行单元格赋值操作 Application.EnableEvents = TrueTarget包含多单元格范围:批量粘贴数据到E列时,
Target为多单元格区域,直接调用Target.Row会导致逻辑错误或触发异常。
解决:遍历交集内的每个单元格逐个处理:Dim cell As Range For Each cell In Intersect(Target, myTableRange) ' 针对单个cell执行逻辑 Next cell工作表处于保护状态:工作表被保护时,修改
AC/AD列会触发权限错误。
解决:临时解除保护(有密码需添加密码参数),操作后重新保护:Me.Unprotect ' 带密码用Me.Unprotect Password:="yourpassword" ' 执行单元格赋值操作 Me.Protect ' 带密码用Me.Protect Password:="yourpassword"
修正后的完整代码
Private Sub Worksheet_Change(ByVal Target As Range) Dim myTableRange As Range Dim myDateTimeRange As Range Dim myUpdatedRange As Range Dim cell As Range Set myTableRange = Me.Range("E1:E1000") ' 用Me限定当前工作表,避免跨表引用错误 If Intersect(Target, myTableRange) Is Nothing Then Exit Sub Application.EnableEvents = False For Each cell In Intersect(Target, myTableRange) Set myDateTimeRange = Me.Range("AC" & cell.Row) Set myUpdatedRange = Me.Range("AD" & cell.Row) If myDateTimeRange.Value = "" Then myDateTimeRange.Value = Now End If myUpdatedRange.Value = Now Next cell Application.EnableEvents = True End Sub
额外注意事项
- 用
Me.Range替代直接Range,明确限定当前工作表,避免因激活其他工作表导致的引用错误。 - 若需指定时间格式,可改用
Format(Now, "yyyy-mm-dd hh:mm:ss")。
内容的提问来源于stack exchange,提问作者Lowie Feyt
相关产品推荐
相关产品推荐

