Excel VBA Zeile suchen und über Workbook hinweg kopieren

nigema

Newbie
Registriert
Sep. 2016
Beiträge
2
Hallo Zusammen,

ich versuch mal mein Glück hier bei Euch und hoffe ihr könnt mir helfen.

Aufgabe ist, Zeilen aus einer Datendatei in eine andere Datei zu kopieren.

Folgender Sachverhalt:
Ich habe in der Datei1 ein Suchkriterium (Name)
Diesen suche ich in Datei 2 (Mehrfachtreffer möglich) und kopiere jeweils die gefundene Zeile aus Datei2 nach Datei1.

Die Herausforderung (zumindest für mich) ist dabei:
Es gibt in Datei1 n-Sheets für die sich die o.g. Suche wiederholen muss.

Mein Ansatz ist folgender:

Code:
Sub ZeilenKopierenMitBedingung()

Dim wbDaten As Workbook
Dim wsDaten As Worksheet
Dim wsZiel As Worksheet
Dim Zeile As Long
Dim ZeileMax As Long
Dim Mitarbeitername As String

'Ermitteln aller Worksheets in der Zieldatei'
For Each wsZiel In ActiveWorkbook.Worksheets
    wsZiel.Select

' Ermitteln des Suchkriteriums'
    Mitarbeitername = wsZiel.Cells(1, 1)

'Öffnen der Dateidatei'
    Set wbDaten = Workbooks.Open("{Dateipfad}\Daten.xlsx", ReadOnly:=True)
    wbDaten.Application.ActiveWindow.Visible = False
    Set wsDaten = wbDaten.Worksheets("Tabelle1")
    
'Ermitteln der Maximalen Zeilen in der Datendatei'
    ZeileMax = wsDaten.UsedRange.Rows.Count

'einfacher Offset für das Einfügen der Zeile'
    n = 10

'Suchen des Mitarbeiternamens in der Datendatei (Spalte 3) und kopieren der gesamten Zeile'
    For Zeile = 1 To ZeileMax
            If wsDaten.Cells(Zeile, 3).Value = Mitarbeitername Then
'Die Destination ist (glaub ich) das Problem...'
                    wsDaten.Rows(Zeile).Copy Destination:=Tabelle1.Rows(n)
            n = n + 1
        End If
    Next Zeile
    
Next
wbDaten.Close (False)
End Sub

Grundsätzlich funktioniert die Suche, ABER die gefundenen Zeilen werden immer auf das erste Sheet der Zieldatei eingefügt. Wegen Destination:=Tabelle1.Rows(n)
Wie krieg ich es hin, dass immer in das aktive Sheet der For-Each-Schleife eingefügt wird aus der ja auch das Suchkriterium stammt.

Ich hoffe jemand hat mein Problem verstanden :( und kann mir weiterhelfen.

Danke jedenfalls schon mal!!
 
statt "Tabelle1" bei der Copy-Destination "wsZiel" verwenden - sollt gehen, wenn ich dein Programm richtig verstehe
 
Genauso, wie du das Suchkriterium ermittelst...:

Code:
wsDaten.Rows(Zeile).Copy Destination:= wsZiel.Rows(n)
 
?! Wie Vernagelt kann Mann denn sein?!
Klar so geht's doch....könnte schwören ich hatte das versucht.

Dann aber gleich noch ne Frage.
Wenn ich jetzt nicht die gesamte Zeile kopieren will sondern nur einen Teil (also einen Range), geht das dann auch wenn der Range nicht zusammenhängend ist? Also bspw. (A3:A15, A20:A30) oder muss ich das dann auf 2 Schritte kopieren?!

Danke nochmal!!
 
Spontan beim Lesen überlegt:
oder muss ich das dann auf 2 Schritte kopieren
Kommt drauf an was du willst. Wenn ich die Funde auf dem Zielblatt ›konzentrieren‹ will würden mir kombinierte Ranges die Lücken lassen nicht helfen.

Persönlich halte ich von .copy nix. Dann lieber direkt - hier mal aus meiner Codebrockensammlung
Code:
Sub yyRangeKopieren()
Worksheets("Blatt4").Range(Worksheets("Blatt4").Cells(1, 12), _
Worksheets("Blatt4").Cells(21, 12)) = _
Worksheets("Blatt5").Range(Worksheets("Blatt5").Cells(1, 4), _
Worksheets("Blatt5").Cells(21, 4)).Value
End Sub
Ich denke du weißt was du wie einsetzen oder referenzieren müsstet (workbook.worksheet.…) ;)

CN8
 
Zurück
Oben