.FindNext在.Find函数(excel vba)之后失败

.FindNext在.Find函数(excel vba)之后失败,excel,find,next,vba,Excel,Find,Next,Vba,我正在尝试使用.Find和.FindNext搜索一列数据。我首先需要找到包含值“Total”的第一个单元格。我试图进入的单元格是“Total”单元格之后的第三个单元格,其中包含值“Tech”。可以肯定的是,单元格(1,1)不包含“Tech”或“Total” 大约有50%的时候,我运行这段代码时,在以Set ResultRng=开头的行中出现了一个类型不匹配错误。剩下的时间里,代码一直在运行,但是结果看起来好像最后两行代码被完全忽略了 我怀疑这里的答案非常简单,但我对excel vba非常陌生,到

我正在尝试使用
.Find
.FindNext
搜索一列数据。我首先需要找到包含值“Total”的第一个单元格。我试图进入的单元格是“Total”单元格之后的第三个单元格,其中包含值“Tech”。可以肯定的是,单元格(1,1)不包含“Tech”或“Total”

大约有50%的时候,我运行这段代码时,在以
Set ResultRng=
开头的行中出现了一个类型不匹配错误。剩下的时间里,代码一直在运行,但是结果看起来好像最后两行代码被完全忽略了

我怀疑这里的答案非常简单,但我对excel vba非常陌生,到目前为止,我还没有找到任何资源可以回答这个问题。请帮忙

如果未找到“Total”,则FirstTotal将为Nothing,这将导致在ResultRange Find(第2行)中尝试使用FirstTotal作为“After”参数时类型不匹配。这将防止该错误:

Set FirstTotal = SearchRng.Find(What:="Total", After:=Cells(1, 1), SearchDirection:=xlNext)
If Not FirstTotal is Nothing Then
   Set ResultRng = SearchRng.Find(What:="Tech", After:=FirstTotal, SearchDirection:=xlNext)
End If
一般来说,任何依赖性发现都需要以这种方式处理

显然,这里需要一些其他的声明,但我不知道那会是什么。

这会有帮助吗

主题:.Find和.FindNext在Excel VBA中

链接

从链接中提取:

Sub Sample()
    Dim oRange As Range, aCell As Range, bCell As Range
    Dim ws As Worksheet
    Dim ExitLoop As Boolean
    Dim SearchString As String, FoundAt As String
    On Error GoTo Err
    Set ws = Worksheets("Sheet3")
    Set oRange = ws.Columns(1)

    SearchString = "2"
    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
    If Not aCell Is Nothing Then
        Set bCell = aCell
        FoundAt = aCell.Address
        Do While ExitLoop = False
            Set aCell = oRange.FindNext(After:=aCell)

            If Not aCell Is Nothing Then
                If aCell.Address = bCell.Address Then Exit Do
                FoundAt = FoundAt & ", " & aCell.Address
            Else
                ExitLoop = True
            End If
        Loop
    Else
        MsgBox SearchString & " not Found"
    End If
    MsgBox "The Search String has been found at these locations: " & FoundAt
    Exit Sub
Err:
    MsgBox Err.Description
End Sub

根据我抛出的一些调试通知,FirstTotal大约有50%的时间被正确设置,其余时间是空的。在此之前,代码中没有其他.Find或.FindNext调用。你能想出发生这种情况的任何原因吗?我们知道这意味着找不到“总计”。这意味着SearchRange不包含“Total”。当找不到“Total”时,我会查看SearchRange的地址。Range.FindNext似乎最终被破坏了。它从未对我起过作用,甚至使用了与Microsoft示例相同的代码。
Sub Sample()
    Dim oRange As Range, aCell As Range, bCell As Range
    Dim ws As Worksheet
    Dim ExitLoop As Boolean
    Dim SearchString As String, FoundAt As String
    On Error GoTo Err
    Set ws = Worksheets("Sheet3")
    Set oRange = ws.Columns(1)

    SearchString = "2"
    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
    If Not aCell Is Nothing Then
        Set bCell = aCell
        FoundAt = aCell.Address
        Do While ExitLoop = False
            Set aCell = oRange.FindNext(After:=aCell)

            If Not aCell Is Nothing Then
                If aCell.Address = bCell.Address Then Exit Do
                FoundAt = FoundAt & ", " & aCell.Address
            Else
                ExitLoop = True
            End If
        Loop
    Else
        MsgBox SearchString & " not Found"
    End If
    MsgBox "The Search String has been found at these locations: " & FoundAt
    Exit Sub
Err:
    MsgBox Err.Description
End Sub