2016-07-14 68 views
0

我在Excel,新建表和舊錶中有兩個工作表。如果列中包含新工作表A列的每個條目,我試圖在舊工作表的A列中進行搜索。我正在使用以下VBA代碼進行搜索,但它在第二個搜索(非列標題搜索)上返回錯誤。我不知道我在做什麼錯 - 任何幫助表示讚賞。這裏是我的代碼:VBA在Range.Find找不到任何內容後返回錯誤

Sub Sample() 

Dim lastRow As Integer 
Dim i As Integer 
Dim rng As Range 
Dim searchrng As Range 
Dim searchval As String 

lastRow = Sheets("New One").Range("A65000").End(xlUp).Row 

Sheets("Old One").Activate 
Set searchrng = Sheets("Old One").Range("A1:A10000") 


For i = 1 To lastRow 

    Sheets("New One").Activate 
    searchval = Sheets("New One").Cells(i, 1).Value 

    Set rng = searchrng.Find(searchval) 

    If Not rng Is Nothing Then 
     MsgBox "Found " & searchval & " in " & rng.Address 
    Else 
     Sheets("New One").Activate 
     Sheets("New One").Cells(i, 1).EntireRow.Interior.Color = vbRed 
    End If 

Next i 

End Sub 

錯誤總是運行時錯誤'1004' - 對象'Range'的方法'查找'失敗。

+2

刪除這一行'Sheets(「New One」)。在這兩個地方激活'看看它是否有效。有關更多信息,請參見[避免選擇](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=excel%20vba%20avoid%20select)。總之,直接使用對象而不是使用'Activate',除非你絕對需要(這很少見)。 –

+0

它沒有工作。我應該補充說,兩個工作表上的列A的列標題是相同的 - 並且它成功找到列標題。然後A列第2行在「新建一個」中,但不是「舊的」,並且它反彈了錯誤。 – user2395969

+2

您也可以使用'Conditional Formatting'來查找Sheet2中找不到的值,並完全刪除VBA。 ...我運行了代碼,它對我很好。 –

回答

1

避免使用.Select

Sub Sample() 

Dim lastRow As Integer 
Dim i As Integer 
Dim rng As Range 
Dim searchrng As Range 
Dim searchval As String 
Dim oldWS As Worksheet, newWS As Worksheet 
Set oldWS = Worksheets("Old One") 
Set newWS = Worksheets("New One") 

lastRow = newWS.Range("A65000").End(xlUp).Row 

Set searchrng = oldWS.Range("A1:A10000") 


For i = 1 To lastRow 

    searchval = newWS.Cells(i, 1).Value 

    Set rng = searchrng.Find(searchval) 

    If Not rng Is Nothing Then 
     MsgBox "Found " & searchval & " in " & rng.Address 
    Else 
     newWS.Cells(i, 1).EntireRow.Interior.Color = vbRed 
    End If 

Next i 

End Sub 

爲你做這項工作?我在我的測試,它的工作。確保你給出的範圍是正確的。

但是,我同意@ScottHoltzman--你可以使用條件格式來做到這一點,避免使用VBA。

0

感謝大家的幫助。

感謝Scott Holtzman的想法,我能夠通過條件格式來實現它。最後,我使用了COUNTIF,而不是IsError。

=COUNTIF('Old One'!$A:$A, 'New One'!$A1)=1 

適用於'New One'Worksheet中的A列。

相關問題