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
相关产品推荐
相关产品推荐

