.Find()运行时错误'91':对象变量或未设置块变量

phi*_*652 0 excel vba runtime-error excel-vba excel-2010

我知道其他问题也被提出同样的错误,但它并没有接近我所拥有的.我试图通过循环(实验室值更改)找到可以在B列中多次找到变量lab的值的行,它第一次工作但第二次出现此错误.

For Each lab In arr    
    NFD = el & " " & Sheets("Sheet1").Cells(1, 3).value
    If SheetExists(NFD) Then

       Worksheets(NFD).Activate

       Dim FindRow As Range
       Dim FindRowNumber As Long
       Set FindRow = Sheets(NFD).Range("B:B").Find(What:=lab, LookIn:=xlValues)
       FindRowNumber = FindRow.Row 'error on this line

        MsgBox FindRowNumber

    End If
Next 
Run Code Online (Sandbox Code Playgroud)

EDIT1:如果有人有兴趣,这是工作代码:

For Each lab In arr
                If lab <> "" Then
                    lab = Trim(lab)
                        'Find element Sheet
                        NFD = el & " " & Sheets("Sheet1").Cells(1, 3).value
                            If SheetExists(NFD) Then    
                                'Find lab number row in colunm B
                              Set FindRow = Sheets(NFD).Range("B:B").Find(What:=lab, LookIn:=xlValues)

                               If FindRow Is Nothing Then
                                 Debug.Print "Nothing Found"
                               Else
                                  FindRowNumber = FindRow.Row

                               End If

                             End If

                End If

Next
Run Code Online (Sandbox Code Playgroud)

Sob*_*gen 5

您可能需要检查是否找到了任何内容.如果没有项目,FindRow将是'Nothing'.

If FindRow Is Nothing Then
    MsgBox "Nothing Found"
    'you can set FindRowNumber to something here if you want, like 0 or -1
Else
    FindRowNumber = FindRow.Row
    MsgBox FindRowNumber
End If
Run Code Online (Sandbox Code Playgroud)

在评论问题后编辑我的测试代码是:

Sub test()
    Dim arr(0 To 2) As String
    Dim lab As Variant
    Dim FindRow As Range
    Dim FindRowNumber As Long

    arr(0) = "aaa"
    arr(1) = "bbb"
    arr(2) = "ccc"

    For Each lab In arr
        Set FindRow = Sheets("Sheet1").Range("B:B").Find(What:=lab, LookIn:=xlValues)

        If FindRow Is Nothing Then
            Debug.Print "Nothing Found"
            'you can set FindRowNumber to something here if you want, like 0 or -1
        Else
            FindRowNumber = FindRow.Row
            Debug.Print FindRowNumber
        End If
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

我分别在单元格B1,B2和B3中有'aaa','bbb'和'ccc',它们都按预期工作,在调试控制台中打印1,2和3.