VBA判断工作表字符串的If语句遇Run-time error '91'求助
解决VBA查找字符串时Run-time error '91'的问题
这个问题我太熟悉了——Run-time error '91'本质上就是你在尝试访问一个未被初始化的对象变量,说白了就是当Cells.Find("AAA")找不到内容时,它返回的是Nothing,这时候你直接去用它的属性(比如.Value)就会炸锅,根本走不到ElseIf分支。
问题根源拆解
你大概率是直接在If条件里写了类似下面的错误代码:
' 错误示例!会触发Error 91 If Cells.Find("AAA").Value = "AAA" Then MsgBox "找到AAA" ElseIf Cells.Find("BBB").Value = "BBB" Then MsgBox "找到BBB" End If
当工作表里没有"AAA"时,Cells.Find("AAA")返回Nothing,这时候访问.Value就会触发错误91,代码直接中断,根本不会执行到检查"BBB"的ElseIf部分。
正确写法示例
核心思路是先把查找结果存到Range变量里,先判断是否找到(即变量不是Nothing),再做后续处理:
Sub CheckForTargetStrings() Dim foundRange As Range ' 第一步:查找"AAA",精确匹配(模糊匹配请把xlWhole改成xlPart) Set foundRange = ActiveSheet.Cells.Find( _ What:="AAA", _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False ' 不区分大小写,需要区分则改为True ) If Not foundRange Is Nothing Then ' 找到AAA时的逻辑 MsgBox "找到了AAA" Else ' 未找到AAA,继续查找BBB Set foundRange = ActiveSheet.Cells.Find( _ What:="BBB", _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False _ ) If Not foundRange Is Nothing Then ' 找到BBB时的逻辑 MsgBox "找到了BBB" Else ' 两者都未找到时的逻辑 MsgBox "AAA和BBB均未找到" End If End If End Sub
关键注意点
- 每次查找后必须先判断
foundRange是否为Nothing,确认对象存在后再执行后续操作,避免空对象访问错误。 - 不要忽略
Find方法的参数,默认参数可能和预期不符(比如默认LookAt:=xlPart会匹配包含目标字符串的内容)。 - 如果需要遍历整个工作簿的工作表查找,只需套一层工作表循环,核心判断逻辑保持不变。
内容的提问来源于stack exchange,提问作者Mr.Riply
相关产品推荐
相关产品推荐

