2016-07-14 9 views
0

Ich habe zwei Arbeitsblätter in Excel, New Sheet und Old Sheet. Ich versuche, in Spalte A des alten Blattes zu suchen, wenn die Spalte jeden Eintrag der Spalte A des neuen Blattes enthält. Ich verwende den folgenden VBA-Code, um zu suchen, aber es gibt einen Fehler bei der zweiten Suche (der Suche ohne Spaltenüberschrift) zurück. Ich habe keine Ahnung, was ich falsch mache - jede Hilfe wird geschätzt. Hier ist mein Code:VBA Rückgabe Fehler nach Range.Find findet nichts

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 

Der Fehler ist immer Laufzeitfehler ‚1004‘ - Methode ‚Suche‘ des Objekts ‚Range‘ ist fehlgeschlagen.

+2

entfernen Sie diese Zeile 'Sheets (" New One "). Aktivieren Sie an beiden Stellen und sehen Sie, ob es funktioniert. Weitere Informationen finden Sie unter [Auswahl vermeiden] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=excel%20vba%20avoid%20select). Kurz gesagt, arbeiten Sie direkt mit den Objekten, anstatt 'Aktivieren' zu verwenden, es sei denn, Sie müssen das unbedingt (das ist selten). –

+0

Es hat nicht funktioniert. Ich sollte hinzufügen, dass die Spaltenüberschriften für Spalten A auf beiden Arbeitsblättern identisch sind - und die Spaltenüberschrift erfolgreich gefunden wird. Dann ist Spalte A, Zeile 2 in "New One", aber nicht "Old One" und es kickt den Fehler zurück. – user2395969

+2

können Sie auch 'Bedingte Formatierung' verwenden, um die Werte zu finden, die nicht in Blatt2 gefunden wurden, und VBA vollständig zu entfernen. ... Ich habe den Code ausgeführt und es hat super für mich funktioniert. –

Antwort

1

Vermeiden Sie .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 

diese Arbeit für Sie? Ich habe es in meinem getestet und es hat funktioniert. Stellen Sie sicher, dass die von Ihnen angegebenen Bereiche korrekt sind.

Aber ich stimme @ScottHoltzman - Sie können dies mit bedingter Formatierung, Vermeidung der Verwendung von VBA.

0

Danke an alle für die Hilfe.

Ich konnte es durch bedingte Formatierung zu arbeiten, dank Scott Holtzman für die Idee. Am Ende habe ich COUNTIF anstelle von IsError verwendet.

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

angewendet auf Spalte A in 'New One' Arbeitsblatt.

Verwandte Themen