VBA代码调用Range.Find与EoMonth时触发错误91,求排查解决
错误91:对象变量未设置的解决办法
你的代码触发错误91的核心原因是**Range.Find方法没有找到匹配值时会返回Nothing**,这时候直接调用.Interior.Color相当于对空对象操作,就会报错。
修正后的代码
Sub rollforward() Dim ua As Worksheet: Set ua = Sheets("Unit Activity Adj Tab") Dim ws As Worksheet: Set ws = Sheets("Assumptions") ' 先获取目标日期,同时校验有效性 Dim targetDate As Variant If IsDate(ws.Range("B1").Value) Then targetDate = Application.WorksheetFunction.EoMonth(ws.Range("B1"), 0) Else MsgBox "Assumptions表B1单元格不是有效日期!" Exit Sub End If ' 用变量接收Find结果,避免空对象操作 Dim foundCell As Range Set foundCell = ua.Range("G1:CX1").Find( _ What:=targetDate, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False) ' 判断是否找到单元格,再执行颜色设置 If Not foundCell Is Nothing Then foundCell.Interior.Color = RGB(198, 239, 206) Else MsgBox "Unit Activity Adj Tab表G1:CX1范围内未找到目标日期!" End If End Sub
关键修正点
- 增加空对象判断:用
foundCell变量接收Find结果,通过If Not foundCell Is Nothing确认找到后再操作,避免直接访问空对象的属性 - 日期有效性校验:先检查
Assumptions表B1单元格是否为有效日期,防止EoMonth函数因输入非法报错 - 明确Find参数:指定
LookIn:=xlValues(按单元格值查找)、LookAt:=xlWhole(完全匹配),避免默认参数导致的查找偏差
内容的提问来源于stack exchange,提问作者B-Rye
相关产品推荐
相关产品推荐

