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

Access VBA遍历Excel所有工作表搜索指定字符串问题求助

解决VBA遍历Excel工作表搜索时的Error 91问题

我来帮你搞定这个遍历搜索时的对象未设置错误!出现Error 91的核心原因很简单:当Cells.Find()在某个工作表里找不到目标字符串时,它会返回Nothing,这时候你直接调用.Activate就会触发对象未定义的错误。下面是修复后的完整代码,以及关键修改点的说明:

修复后的完整代码

Private Sub Command132_Click()
    On Error GoTo Err_Command132_Click
    Dim filename As String
    Dim searchstring As String
    Dim xlApp As Excel.Application 'Excel object
    Dim XlBook As Excel.Workbook 'Workbook object
    Dim Xlsheet As Excel.Worksheet 'Worksheet object
    Dim foundRange As Excel.Range '新增:存储Find结果的Range对象
    
    Set xlApp = CreateObject("Excel.Application")
    searchstring = Me.Matrixsrch
    filename = Me.GroupsMatrixLoccntrl
    
    Set XlBook = xlApp.Workbooks.Open(filename)
    xlApp.Visible = True
    xlApp.ActiveWindow.WindowState = xlMaximized
    
    '遍历所有工作表
    For Each Xlsheet In XlBook.Worksheets
        With Xlsheet
            '先将Find结果赋值给变量,避免直接操作Nothing
            Set foundRange = .Cells.Find(What:=searchstring, _
                                        After:=.Cells(1, 1), _
                                        LookIn:=xlValues, _
                                        LookAt:=xlPart, _
                                        SearchOrder:=xlByRows, _
                                        SearchDirection:=xlNext, _
                                        MatchCase:=False, _
                                        SearchFormat:=False)
            
            '判断是否找到内容,再执行Activate
            If Not foundRange Is Nothing Then
                foundRange.Activate
                '如果找到后想停止遍历,可以在这里加Exit For
                'Exit For
            Else
                '可选:提示当前工作表未找到,也可以注释掉这行
                MsgBox "在工作表【" & Xlsheet.Name & "】中未找到目标字符串"
            End If
        End With
    Next Xlsheet

Exit_Command132_Click:
    '注意:退出前最好释放Excel对象,避免进程残留
    If Not XlBook Is Nothing Then
        '如果不需要保留打开的Excel,可以加XlBook.Close SaveChanges:=False
        Set XlBook = Nothing
    End If
    If Not xlApp Is Nothing Then
        Set xlApp = Nothing
    End If
    Exit Sub

Err_Command132_Click:
    MsgBox "Error " & Err.Number & "; " & Err.Description
    Debug.Print "Error " & Err.Number & "; " & Err.Description
    Resume Exit_Command132_Click
End Sub

关键修改点说明

  • 新增foundRange变量:把Find()的结果先存储到Range变量中,这样可以先判断是否为Nothing,避免直接调用.Activate触发错误
  • 添加存在性判断:用If Not foundRange Is Nothing Then确认找到内容后,再执行激活操作;未找到时可以给出提示(也可以根据需求去掉提示)
  • 修正常量拼写:把xlvalues改为规范的xlValues(VBA不区分大小写,但规范写法更易读,也避免潜在的识别问题)
  • 添加对象释放逻辑:在退出前释放Excel相关对象,防止Excel进程在后台残留占用资源
  • 可选的遍历终止:如果找到第一个匹配项后就想停止遍历,可以在foundRange.Activate后添加Exit For

内容的提问来源于stack exchange,提问作者baffle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:43:11