2015-11-21 61 views
1

我有是這樣一個要求:Range.Find()失敗

  • 我有從列的數據兩個Excel文件至Q
  • 我通過每個行迭代在一個Excel中的每個片材,獲取列A中的值,然後在其他Excel中找到相應表單中的值。
  • 如果匹配,我檢查Excel中兩列A,G和J匹配的值。如果它們不匹配,則它們將被記錄在日誌文件(Excel中,其中包含不匹配的矩陣類型表示)。 (還有待執行)
  • 如果沒有匹配,我必須再次記錄它們。 (尚未實施)

的代碼是:

For Each workSheet1 In MainWorkBook.Worksheets 
Set MainWorksheet = workSheet1 
Set SecondaryWorksheet = workSheet1 
MainWorksheet.Activate 
Cells.Select 
Selection.EntireColumn.Hidden = False 
Selection.EntireRow.Hidden = False 
rowcount = MainWorksheet.Cells(Rows.count, 1).End(xlUp).Row 
For i = 3 To rowcount 
    MainCheckName = Trim(MainWorksheet.Cells(i, "A")) 
    If (PreviousCheck <> MainCheckName And MainCheckName <> "") Then 
     SecondaryWorksheet.Activate 
     rowcount = SecondaryWorksheet.Cells(Rows.count, 1).End(xlUp).Row 
     SecondaryWorksheet.Range(SecondaryWorksheet.Cells(1, "A"), SecondaryWorksheet.Cells(rowcount, "A")).Select 
     Set SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole) 
     If Not SecondaryCheckName Is Nothing Then 
      CheckRow = Selection.Find(what:=MainCheckName, LookAt:=xlWhole).Row 
       <further process here> 

Next Next 

現在,我有這行的一個問題:

Set SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole) 

後處理該活動對一些十張,但我有兩個不同工作簿的工作表中匹配的內容,我得到NothingFind函數返回。

什麼是錯,爲什麼這裏的病情會失敗?

+0

我看到你有2個'For's,但只有一個 –

+0

糟糕,忘記在代碼 –

+0

中添加'Next','MainWorksheet'和'SecondaryWorksheet'在外部迭代過程中被設置爲同一個工作表For ..每個...下一個'。怎麼會有什麼區別? – Jeeped

回答

1

您還沒有包含SecondaryCheckName的聲明,但是每一個指示都是它是一個字符串而不是Range類型變量。你不應該Set它到由Range.Find method返回的Range object;它應該簡單地分配給.Find結果的值。或者,將其聲明爲範圍類型變量,以便您將其轉換爲範圍對象以備將來使用。

SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole).Value2 

這是您爲什麼收到錯誤的答案。但是,我認爲這不是實現目標的最佳方式。有一個決定缺乏錯誤控制,你應該減少,如果不是完全避免使用。選擇and Selection`。

+0

謝謝了一噸Jeeped。是的錯誤控制技術尚未放置,但首先準備骨架。 –