2010-09-27 125 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