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

Excel VBA触发run time error 1004应用程序或对象定义错误求助

VBA运行时错误1004排查及修复方案

错误原因

  • Find方法无匹配结果导致空对象调用
    代码中使用Find方法查找员工姓名、对应日期时,如果搜索范围内没有匹配值,OTr或者cl对象会被赋值为Nothing,此时直接调用OTr.Row、cl.Column属性就会触发1004错误。
  • 单元格引用未绑定工作表
    代码中ws.Range(Cells(OTr.Row, cl.Column))里的Cells对象默认指向当前活动工作表,如果当前活动工作表不是PCMB,会出现范围不匹配的报错。
  • 日期格式不匹配
    拼接生成的Datework是字符串类型,如果表头的日期是Excel原生的数值型日期格式,会导致Find匹配失败,cl为空触发错误。
  • 变量未声明导致异常
    代码中Employeecm、day、month、years、Original均未提前声明,可能存在变量未赋值、拼写错误等隐藏问题。

修复后的代码

Option Explicit ' 放在模块最顶部,强制变量声明
Private Sub searchCMB_Click()
    Dim ws As Worksheet
    Dim OTr As Range
    Dim Datework As Date
    Dim cl As Range
    Dim Original As Variant
    Set ws = Worksheets("PCMB")
    
    ' 查找员工
    Set OTr = ws.Range("a3:a36").Find(Employeecm.Text, LookAt:=xlWhole, SearchOrder:=xlByRows)
    If OTr Is Nothing Then
        MsgBox "未找到匹配的员工信息"
        Exit Sub
    End If
    
    ' 生成日期并查找
    Datework = DateSerial(CInt(years), CInt(month), CInt(day)) ' 转成日期类型匹配
    Set cl = ws.Range("c2:dc2").Find(what:=Datework, LookIn:=xlValues, LookAt:=xlWhole)
    If cl Is Nothing Then
        MsgBox "未找到匹配的日期"
        Exit Sub
    End If
    
    ' 读取加班数据
    If ws.Cells(OTr.Row, cl.Column) <> "" Then
        Original = ws.Cells(OTr.Row, cl.Column).Value
        ' 这里可以加Original后续处理逻辑
    Else
        MsgBox "Do not have OT"
    End If
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:54:09