2016-03-29 8 views
0

Ich habe zwei Arbeitsmappen, beide Layouts sind identisch. Die Arbeitsmappe, in der der VBA-Code ist mein Original und das zweite Arbeitsbuch hat einige Overlay-Informationen. Was ich versuche zu tun ist für jede Zeile in der zweiten Arbeitsmappe ist es auf dem Original zu finden und kopieren Sie diese Zeilen Informationen darüber, wenn es nicht gefunden wird, dann fügen Sie diese Zeile als eine neue Zeile ein. Ich vergleiche die Spalte G wie diese Spalte die Daten nie ändern wird dies ist eine eindeutige ID.Suchen und Ersetzen von Zeilen aus einem Arbeitsblatt in ein anderes

Ich erhalte einen Compiler-Fehler (Methode oder Datenelement nicht gefunden) auf dem .Find on line: -

Set rngFound = .Find(What:=cell.Value, LookIn:=wbol.Worksheets("DLT Formatted").Range("G:G"), _ 
         SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 

Dies ist der VBA-Code Ich habe bisher: -

Set wbol = Workbooks.Open("C:Documents\Overlay.xls")  
Set sht2 = Workbooks("Overlay").Worksheets("Overlay Template") 
      With sht2 
       For Each Row In Range("G:G") 
        Set rngFound = .Find(What:=cell.Value, LookIn:=wbol.Worksheets("Overlay Template").Range("G:G"), _ 
          SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
        If Not rngFound Is Nothing Then 
         rngFound.Select 
         Selection.Copy 
         Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial 
        End If 
        Next 
      End With 

Ich habe meinen Code geändert, jetzt bekomme ich und Objekt benötigt Fehler in der gleichen Zeile. Ich bin neu in VBA so nicht sicher, ob ich verstehen, warum dies geschieht: -

With sht2 
     For Each Row In Range("G:G") 
      Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=cell.Value, LookIn:=xlValues, _ 
       SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
      If Not rngFound Is Nothing Then 
       rngFound.Copy 
       Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial 
      End If 
     Next 
    End With 

Antwort

0

Der „Lookin“ Parameter nur eine der folgenden XlFindLookIn Konstanten sein: xlFormulas, Special xlValues ​​oder xlNotes.

Für den Bereich zu suchen, würden Sie

tun
Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=.cell.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) 

Die vorhergehende. in ".cell.Value" ist wichtig. Weitere Informationen zur Methode finden Sie auf der Microsoft website

Sie können auch eine gerade RngFound.copy in Ihrem Code, müssen Sie nicht zuerst wählen.

sollte der Code Ende aussehen

With sht2 
     For Each r In .Range("G:G") 
      Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, _ 
         SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
      If Not rngFound Is Nothing Then 
        rngFound.Copy 
        Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial 
      End If 
     Next 
    End With 
+0

ich VBA neu bin so durch Website usw. meinen Weg durch zu verwirren versucht, ich bin nicht sicher, ob ich verstehe, was Sie meinen. Ich habe die .find Reihe zu diesem geändert 'Set rngFound = RangeToSearch.Find (Was: = cell.Value, LookIn: = xlValues, _ SearchOrder: = xlByRows, SearchDirection: = xlNext, MatchCase: = True)' aber ich bin einen Objektfehler erhalten. – user3088476

+0

Sorry, RangeToSearch ist im wahrsten Sinne des Wortes der Bereich, den Sie suchen. In Ihrem Fall wäre es das, was Sie ursprünglich in "LookIn" platziert haben: wbol.Worksheets ("Overlay Template"). Range ("G: G"). Ich werde die Antwort für die Klarheit bearbeiten – Verity

+0

Immer noch einen Objektfehler. Ich werde meine Frage mit dem geänderten Code aktualisieren. – user3088476

Verwandte Themen