VBA Find函数查找公式计算值时偶发运行时错误91问题咨询
VBA Find方法偶发运行时错误91修复方案
错误根因
- VBA的
Find方法参数是全局持久化的,手动调用Excel查找功能、其他代码片段调用Find时修改的参数(如匹配规则、搜索范围等)会被继承,哪怕当前代码指定了部分参数,未显式声明的参数仍会使用历史值,导致匹配规则不符合预期查找失败。 - 修改代码再还原的操作会触发VBA运行环境临时重置,清空了
Find的历史参数缓存,所以运行暂时恢复正常,但后续只要其他操作修改了Find参数,问题会再次复现。 - 未做查找结果判空就直接调用
Offset方法,一旦Find返回Nothing就会直接抛出91错误。 - 若开启了手动计算模式,查找时公式计算结果未刷新,也会导致查找不到对应值。
修复方案
- 调用
Find时必须显式指定所有参数,避免继承历史设置 - 查找前先强制刷新工作表公式计算,确保值为最新状态
- 先将查找结果赋值给Range变量,判空后再做后续操作
- 若目标值为数值类型,不要用字符串格式的
"2021"查找,避免类型不匹配
修正后的代码如下:
Dim findRng As Range ' 替换为DP区域所属的具体工作表对象,不要依赖活动工作表 Sheet1.Calculate ' 全参数指定Find规则,杜绝参数继承问题 Set findRng = Sheet1.Range(DP).Find( _ What:=2021, ' 若确实是文本格式的2021再改回带引号的"2021" LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False, _ SearchFormat:=False _ ) If Not findRng Is Nothing Then findRng.Offset(1, 0) = t Else ' 可按需添加查找失败的兜底处理逻辑 Debug.Print "未找到目标值2021" End If
内容的提问来源于stack exchange,提问作者parisa
相关产品推荐
相关产品推荐

