You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:25:57