VBA Findnext问题

时间:2010-09-27 17:35:22

标签: excel vba

此代码适用于输入 * ** * ** * *** 之间的编码我正在尝试同时进行两种不同的搜索。谁能解释我做错了什么?感谢

Public Sub Swap()

With Sheet1.Range("A:A")
    Set LastCell = .Cells(.Cells.Count)
End With
Set FoundCell = Sheet1.Range("A:A").Find(what:=cusip, after:=LastCell)
If Not FoundCell Is Nothing Then
    FirstAddr = FoundCell.Address
End If
Do Until FoundCell Is Nothing
    account = Sheet1.Cells(FoundCell.Row, 2)

''#*************************************
    Set FoundCell2 = Sheet2.Range("B:B").Find(what:=account)
    If Not FoundCell2 Is Nothing Then
        FirstAddr2 = FoundCell2.Address
    End If

''#*********************************************

    Set FoundCell = Sheet1.Range("A:A").FindNext(after:=FoundCell)
''#Break out of loop when searched through all of the cusips
    If FoundCell.Address = FirstAddr Then
        Exit Do
    End If
Loop

End Sub

1 个答案:

答案 0 :(得分:2)

您不能同时执行两个不同的查找。这是Excel对象模型的限制。只有一个查找“光标”,当您在A:A中尝试FindNext时,它将在B:B中出现。你必须为其中一个发现做旧的低效循环方式。这是你如何循环内部查找

Public Sub Swap()

    Dim LastCell As Range
    Dim FoundCell As Range
    Dim FoundCell2 As Range
    Dim FirstAddr As String
    Dim FoundAddr As String
    Dim Account As Variant

    Const CUSIP As String = "Cusip"

    Set LastCell = Sheet1.Cells(Sheet1.Rows.Count, 1)

    Set FoundCell = Sheet1.Range("A:A").Find(what:=CUSIP, after:=LastCell)
    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address

        Do
            Account = Sheet1.Cells(FoundCell.Row, 2)
            FoundAddr = ""
            For Each FoundCell2 In Intersect(Sheet2.UsedRange, Sheet2.Columns(2)).Cells
                If FoundCell2.Value = Account Then
                    FoundAddr = FoundCell2.Value
                    Exit For
                End If
            Next FoundCell2

            If Len(FoundAddr) = 0 Then
                FoundAddr = "Not Found"
            End If

            Debug.Print FoundCell.Address, FoundAddr

            Set FoundCell = Sheet1.Range("A:A").FindNext(after:=FoundCell)

        Loop Until FoundCell Is Nothing Or FoundCell.Address = FirstAddr
    End If

End Sub