2016-04-01 5 views
0

Im den folgenden Fehler, wenn ich versuche mein Makro auszuführen:Laufzeitfehler, wenn Makro läuft für mehrere Suchen und Ersetzen

Run-time error '1004': 
Application-defined or object-defined error 

Hier ist das Makro:

Sub multiFindNReplace() 
    Dim myList, myRange 
    Set myList = Sheets("Receivable").Range("CN2:CO6") 'two column range where find/replace pairs are 
    Set myRange = Sheets("Receivable").Range("A2:BQ1000") 'range to be searched 
    For Each cel In myList.Columns(1).Cells 
     myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, _ 
     LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False 
    Next cel 
End Sub 

Und wenn ich auf " debug 'sind die drei gelb hervorgehobenen Zeilen:

myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, LookAt:=xlWhole, _ 
MatchCase:=True, SearchFormat:=False, _ 
ReplaceFormat:=False 

Was kann ich tun, um das Problem zu beheben?

+0

hmm, funktioniert für mich – mrbungle

+0

Wo haben Sie definieren und initialisieren „cel“? Was sind die Datentypen für myList und myRange? –

+0

Ich bin ziemlich neu und das ist der ganze Code, den ich von jemand anderem bekommen habe ... Muss ich etwas mehr tun, um cel zu definieren? –

Antwort

0

Ich vermute, dass der Wert in myList Spalte 1 nicht

in myRange existieren können Sie für diesen Test, bevor Sie versuchen, etwas zu ersetzen, die nicht und ziehen weiter existiert, wenn es nicht gefunden wird. Siehe unten. (Ich entfernte die SearchFormat Argumente, da sie scheinen nicht hier anzuwenden (und Standardwerte sind in Ordnung))

Option Explicit 

Sub multiFindNReplace() 

    Dim myList as Range, myRange as Range, cel as Range 

    Set myList = Sheets("Receivable").Range("CN2:CO6") 'two column range where find/replace pairs are 
    Set myRange = Sheets("Receivable").Range("A2:BQ1000") 'range to be searched 

    For Each cel In myList.Columns(1).Cells 

     Dim rngFound as Range 
     Set rngFound = myRange.Find(cel.Value, LookAt:=xlWhole, MatchCase:=True) 

     If not rngFound is Nothing Then 

      myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, _ 
       LookAt:=xlWhole, MatchCase:=True 

     End If 

    Next cel 

End Sub 
+0

Danke, ich habe auch vor einigen Minuten die Suchformatargumente entfernt und habe Es funktioniert mit dem ursprünglichen Code, den ich zusätzlich zur Verwendung der neuen Deklarationszeile gepostet habe ... Jetzt versuche ich nur herauszufinden, wie man es an Zellen arbeitet, die ** NUR ** das enthalten, wonach ich suche . Wenn ich nach "A" suche, wird es eine Zelle ändern, die "A" enthält, aber es ändert nicht das "A" in einer Zelle, die "AB" enthält –

+0

Ich habe es, geändert xlWhole zu xlPart. Danke für Ihre Hilfe. –