2010-09-27 128 views
0

此代码的工作,直到输入* ** * ** * ***我试图在同一时间做两个不同的搜索之间的编码。有人能解释我做错了什么吗?谢谢VBA FindNext中问题

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 
+0

什么是你看到的不受欢迎的行为? – BenV 2010-09-28 00:42:36

回答

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