下标超出范围 - 使用Excel VBA查找下一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下标超出范围 - 使用Excel VBA查找下一个相关的知识,希望对你有一定的参考价值。

我在此行收到“下标超出范围”错误消​​息:

Set NextRow = Sheets(xSheet).Cells.FindNext(After:=bookmark)

理论上我在设置foundCell的那一刻就设置了我的书签。

我想:

  1. 搜索与“Str”变量中的文本匹配的第一条记录。
  2. 使用Excel的查找功能,查找文本及其所在的行,并根据单元格值填充用户表单
  3. 计算总结果,这样我就可以在用户表单的某处找到[1] [3]
  4. 使用按钮向后搜索(上一页和下一页)我的搜索结果。

'Global Variables
Dim foundCell
Dim bookmark


Private Sub btnSearch_Click()

Dim Str
Dim FirstAddr
Dim xSheet

xSheet = "Office Spaces"

Str = "B-32"

    With Sheets(xSheet)

        Set foundCell = .Cells.Find(What:=Str, After:=.Cells(1, 1), _
                        LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

        Set bookmark = foundCell

    End With


    If Not foundCell Is Nothing Then

        MsgBox ("""Bingo"" found in row " & foundCell.Row)

        UserForm1.location.Text = Sheets(xSheet).Cells(foundCell.Row, 3).Value
        UserForm1.office.Value = Sheets(xSheet).Cells(foundCell.Row, 2).Value
        UserForm1.floor.Value = Sheets(xSheet).Cells(foundCell.Row, 1).Value
        UserForm1.status.Value = Sheets(xSheet).Cells(foundCell.Row, 4).Value
        UserForm1.telephone.Value = Sheets(xSheet).Cells(foundCell.Row, 5).Value
        UserForm1.mobile.Value = Sheets(xSheet).Cells(foundCell.Row, 6).Value
        UserForm1.owner.Value = Sheets(xSheet).Cells(foundCell.Row, 7).Value
        UserForm1.notes.Value = Sheets(xSheet).Cells(foundCell.Row, 8).Value
        UserForm1.recnum.Value = 1
        FirstAddr = foundCell.Address

        Dim i

        Do Until foundCell Is Nothing

            Set foundCell = Sheets(xSheet).Cells.FindNext(After:=foundCell)

            i = i + 1

            If foundCell.Address = FirstAddr Then Exit Do
        Loop

        If i > 1 Then
            btnPrev.Enabled = True
            btnNext.Enabled = True
        End If

        UserForm1.recmax.Value = i

    Else
        MsgBox ("Bingo not found")
    End If

End Sub


Private Sub btnNext_Click()

Dim NextRow

Set NextRow = Sheets(xSheet).Cells.FindNext(After:=bookmark)

UserForm1.location.Value = Sheets(xSheet).Cells(NextRow.Row, 3).Value
UserForm1.office.Value = Sheets(xSheet).Cells(NextRow.Row, 2).Value

End Sub
答案

错误是由xSheet未分配适当的值引起的。为什么它没有价值?因为它是在一个Sub中定义和分配的,并在另一个Sub中使用。解决这个问题的一种方法是使xSheetbookmark那样全球化。

最好还要考虑其他评论的建议。这些建议可以改善您的代码。

以上是关于下标超出范围 - 使用Excel VBA查找下一个的主要内容,如果未能解决你的问题,请参考以下文章

打印来自 For Each 函数 VBA 的数组结果得到下标超出范围错误

如何在我的 VBA 代码中解决这个“下标超出范围错误”?

无法从 Cells excel VBA 中检索值

VBA Excel - 自动填充方法超出范围类错误

带有范围的 Excel VBA Vlookup

如何使用 VBA 在 Excel 中正确添加表格列?