使用Range.find以日期为参数查找行号时遇运行时错误91的问题
解决VBA日期查找时的运行时错误91问题
错误原因分析
- 运行时错误91:当
Range.Find()方法未找到匹配值时,会返回Nothing,此时直接调用.row属性就会触发该错误——你无法访问一个不存在对象的属性。 - 日期匹配失效:Excel中的日期本质是双精度浮点数,若
Find方法参数设置不当(比如未指定查找类型、匹配方式),会导致明明存在的日期无法被匹配到。
修正后的代码
Dim i As Integer Dim tb1_length As Integer Dim v1 As Variant Dim foundCell As Range ' 先获取tb1的实际行数,替换成你需要的逻辑 tb1_length = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To tb1_length v1 = Range("A" & i).Value ' 重置查找对象,避免上一次结果干扰 Set foundCell = Nothing ' 配置Find参数确保日期精准匹配 Set foundCell = Range("D1:D20").Find( _ What:=v1, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False) ' 先判断是否找到匹配项,再执行后续操作 If Not foundCell Is Nothing Then MsgBox "找到的行号:" & foundCell.Row Else MsgBox "未找到日期:" & v1 End If Next i
关键说明
- 对象存在性判断:每次查找后先检查
foundCell是否不为Nothing,彻底避免错误91。 - 精准匹配参数:
LookIn:=xlValues:基于单元格实际存储的数值查找,而非显示的文本格式,确保日期数值层面的匹配。LookAt:=xlWhole:强制匹配整个单元格内容,避免部分匹配导致的误判。
- 显式变量声明:提前声明所有变量,提升代码稳定性和可读性,这是VBA的通用最佳实践。
内容的提问来源于stack exchange,提问作者felipe kreft batista
相关产品推荐
相关产品推荐

