Kopieren mit 2 Dateien aktivieren
Hallo, komme mal wieder mit einer Frage. Ich möchte Werte aus einer Datei/Tabelle in eine neue Tabelle kopieren. Ich wähle in den Spalte C und D die zugehörigkeiten zu den einzelnen Datensätzen in der neuen Datei aus. Mein Problem ist dabei, das der Inhalt erfasst, aber nicht in die neue Datei kopiert wird sonder in der Quelldatei im Anschluss an bereits bestehende Werte angefügt wird. Meine Vermutung ist, dass der Fehler im folgenden Codeabschnitt ist.
Und hier mein zusammengetragener Code. (Wahrscheinlich laienhaft aufgebaut). Kann mir trotz allem jemand hier weiter helfen?
' Wenn eine Übereinstimmung gefunden wurde, kopiere die Daten aus Spalte A
If matchFound Then
wsTarget.Cells(lastRowTarget, 1).Value = wsSource.Cells(i, 1).Value
Debug.Print "Kopiert Wert: " & wsSource.Cells(i, 1).Value & " nach Zeile: " & lastRowTarget & " in Zieldatei"
lastRowTarget = lastRowTarget + 1
End If
Und hier mein zusammengetragener Code. (Wahrscheinlich laienhaft aufgebaut). Kann mir trotz allem jemand hier weiter helfen?
Sub CopyDataWithCondition2()
Dim wbSource As Workbook
Dim wbTarget As Workbook
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim lastRowSource As Long
Dim lastRowTarget As Long
Dim i As Long
Dim j As Long
Dim matchFound As Boolean
' Pfade zu den Dateien (Anpassen der Pfade notwendig)
Dim sourceFilePath As String
Dim targetFilePath As String
sourceFilePath = "C:\Users\Besitzer\Desktop\Vergleich1.xlsm"
targetFilePath = "C:\Users\Besitzer\Desktop\Vergleich2.xlsx"
On Error GoTo ErrHandler
' Öffne die Quelldatei
Set wbSource = Workbooks.Open(sourceFilePath)
If wbSource Is Nothing Then
MsgBox "Fehler beim Öffnen der Quelldatei.", vbCritical
Exit Sub
End If
Set wsSource = wbSource.Sheets("Tabelle1") ' Anpassen des Blattnamens falls notwendig
If wsSource Is Nothing Then
MsgBox "Fehler beim Öffnen des Arbeitsblatts in der Quelldatei.", vbCritical
Exit Sub
End If
' Öffne die Zieldatei
Set wbTarget = Workbooks.Open(targetFilePath)
If wbTarget Is Nothing Then
MsgBox "Fehler beim Öffnen der Zieldatei.", vbCritical
Exit Sub
End If
Set wsTarget = wbTarget.Sheets("Tabelle1") ' Anpassen des Blattnamens falls notwendig
If wsTarget Is Nothing Then
MsgBox "Fehler beim Öffnen des Arbeitsblatts in der Zieldatei.", vbCritical
Exit Sub
End If
' Letzte belegte Zeile in der Quelldatei in Spalte A
lastRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
Debug.Print "Letzte Zeile in der Quelldatei: " & lastRowSource
' Letzte belegte Zeile in der Zieldatei in Spalte A
lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1
Debug.Print "Nächste freie Zeile in der Zieldatei: " & lastRowTarget
' Durchlaufen der Zeilen in der Quelldatei
For i = 2 To lastRowSource ' Starten bei Zeile 2, falls Zeile 1 Überschriften enthält
matchFound = False
' Durchlaufen der Zeilen in der Zieldatei, um Übereinstimmung in Spalte C und D zu finden
For j = 2 To wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row ' Starten bei Zeile 2, falls Zeile 1 Überschriften enthält
If wsSource.Cells(i, 3).Value = wsTarget.Cells(j, 3).Value And wsSource.Cells(i, 4).Value = wsTarget.Cells(j, 4).Value Then
matchFound = True
Exit For
End If
Next j
' Wenn eine Übereinstimmung gefunden wurde, kopiere die Daten aus Spalte A
If matchFound Then
wsTarget.Cells(lastRowTarget, 1).Value = wsSource.Cells(i, 1).Value
Debug.Print "Kopiert Wert: " & wsSource.Cells(i, 1).Value & " nach Zeile: " & lastRowTarget & " in Zieldatei"
lastRowTarget = lastRowTarget + 1
End If
Next i
' Bestätigungsmeldung anzeigen
MsgBox "Daten erfolgreich kopiert.", vbInformation
' Schließen der Arbeitsmappen
' wbSource.Close SaveChanges:=False
' wbTarget.Close SaveChanges:=True
Exit Sub
ErrHandler:
MsgBox "Fehler: " & Err.Description, vbCritical
On Error Resume Next
If Not wbSource Is Nothing Then wbSource.Close SaveChanges:=False
If Not wbTarget Is Nothing Then wbTarget.Close SaveChanges:=False
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3257924701
Url: https://administrator.de/contentid/3257924701
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
6 Kommentare
Neuester Kommentar
Moin,
das klingt unlogisch, und nach dem obigen Code sollte das, auf den ersten Blick, auch nicht passieren. Aber wahrscheinlich werden da die Quell- und Zielobjekt nicht, wie beabsichtigt, belegt. Was sagt denn Dein Debug.print?
Und versuche doch einfach mal, ohne irgendwelche Vergleiche, in der Schleife an der passenden Stelle einfach einen festen Wert in die Zieltabelle zu schreiben, variablenunabhängig, damit Du siehst, ob das in Deiner Umgebung funktioniert.
Gruß
DivideByZero
das klingt unlogisch, und nach dem obigen Code sollte das, auf den ersten Blick, auch nicht passieren. Aber wahrscheinlich werden da die Quell- und Zielobjekt nicht, wie beabsichtigt, belegt. Was sagt denn Dein Debug.print?
Und versuche doch einfach mal, ohne irgendwelche Vergleiche, in der Schleife an der passenden Stelle einfach einen festen Wert in die Zieltabelle zu schreiben, variablenunabhängig, damit Du siehst, ob das in Deiner Umgebung funktioniert.
Gruß
DivideByZero
Moin,
versuche mal:
Und versuche doch einfach mal, ohne irgendwelche Vergleiche, in der Schleife an der passenden Stelle einfach einen festen Wert in die Zieltabelle zu schreiben, variablenunabhängig, damit Du siehst, ob das in Deiner Umgebung funktioniert.
Alternativ:
in Zeile 64 die Abfrage umkehren:
Dann kopiert er ja in jedem Fall.
Bei einem Test hier mit Beispieldaten alles kein Problem, es wird in die Zieltabelle kopiert. Möglicherweise hast Du da schreibgeschützte Dateien geöffnet, oder solche, die gerade im Zugriff sind, oder wa sauch immer.
Gruß
DivideByZero
P.S.: Bei der Art, wie Du das aufgebaut hast, sollte das Makro in einer 3. Datei sein (z.B. makro.xlsm), aus der heraus die beiden anderen geöffnet werden.
versuche mal:
Und versuche doch einfach mal, ohne irgendwelche Vergleiche, in der Schleife an der passenden Stelle einfach einen festen Wert in die Zieltabelle zu schreiben, variablenunabhängig, damit Du siehst, ob das in Deiner Umgebung funktioniert.
Alternativ:
in Zeile 64 die Abfrage umkehren:
If matchFound = False Then
Dann kopiert er ja in jedem Fall.
Bei einem Test hier mit Beispieldaten alles kein Problem, es wird in die Zieltabelle kopiert. Möglicherweise hast Du da schreibgeschützte Dateien geöffnet, oder solche, die gerade im Zugriff sind, oder wa sauch immer.
Gruß
DivideByZero
P.S.: Bei der Art, wie Du das aufgebaut hast, sollte das Makro in einer 3. Datei sein (z.B. makro.xlsm), aus der heraus die beiden anderen geöffnet werden.