Spalteninhalte kopieren wenn Bedingung erfüllt.

Sorry, hatte weiter oben den Fehler einmal dargestellt. Und er kommt immer noch wenn ich den Code starte.
Sobald der Code die zweite Datei "passiert" hat, und in Die Tabelle springen soll wird der Fehlercode eingeblendet.


Visual Basic:
Hallo, habe den Code mit meinen mitteln einmal verändert. Jetzt wird ein Fehler bei:
Visual Basic:

' Arbeitsblätter festlegen
    Set wsQuelle = wbQuelle.Sheets(1) ' Tabelle in Listemit
    Set wsZiel = wbZiel.Sheets(1)     ' Tabelle in Listeohne

angezeigt.
anwendungs und objectdefinierter Fehler
Laufzeitfehler 1004

Der Pfad und die Tabellenbezeichnungen sind korrekt, x mal kontrolliert.
 
Dann leg mal für alle 4 Variablen eine Überwachung fest, und während dem Einzelschritt (F8) schau dir die Werte dort genau an
 
Das wird beim überwachnungsausdruch angezeigt:
Als Ergebnis wird: Wert außerhalb des Kontexts, Typ wird mit Empty angezeigt. In Tabelle1

Wenn ich das mit
Errorhandler:
Debug.Print Err.Description, Err.Number, Err.Source
Exit Sub
mache, wird bei Wert ")" und bei Typ String angezeigt. Und bei Kontext Tabelle1 Datenkopieren44
 
Da hast du es: eine Variable hat nen ungültigen Wert (Und WELCHE???)

Deine Aussage: Ich habe die Dateinamen usw alle kontrolliert ist wertlos.
Das Programm entscheidet, ob dein Dateiname korrekt ist
 
Danke für den Hinweis. Habe die Tabellen neu erstellt (Kopierfehler und so). Habe nun einen abgewandelten Code, der aber immer noch nicht kopiert wie ich es möchte. Es gibt keine Fehlermeldung mehr. Suche also immer noch den Fehler im VBA Code. Der Vergleich in Spalte B muss TEXT vergleichen. Nochmal mein Versuch:
Visual Basic:
Sub DatenKopieren46()
    Dim wbMit As Workbook
    Dim wbOhne As Workbook
    Dim wsMit As Worksheet
    Dim wsOhne As Worksheet
    Dim letzteZeileMit As Long
    Dim letzteZeileOhne As Long
    Dim i As Long, j As Long
    
    ' Öffnen der Dateien
    Set wbMit = Workbooks.Open("C:\Users\Besitzer\Desktop\ListemitA1.xlsx")
    Set wbOhne = Workbooks.Open("C:\Users\Besitzer\Desktop\ListeohneA1.xlsx")
    
    Set wsMit = wbMit.Sheets("Tabelle1")
    If wsMit Is Nothing Then
        Exit Sub
    End If
    
    Set wsOhne = wbOhne.Sheets("Tabelle1")
    If wsOhne Is Nothing Then
        Exit Sub
    End If
    
    ' Bestimmen der letzten Zeile in beiden Tabellen
    letzteZeileMit = wsMit.Cells(wsMit.Rows.Count, 1).End(xlUp).Row
    letzteZeileOhne = wsOhne.Cells(wsOhne.Rows.Count, 1).End(xlUp).Row
    
    ' Daten vergleichen und kopieren
    For i = 1 To letzteZeileOhne
        For j = 1 To letzteZeileMit
            If wsMit.Cells(j, 2).Value <> "" And wsOhne.Cells(i, 2).Value <> "" And wsMit.Cells(j, 2).Value = wsOhne.Cells(i, 2).Value Then
                wsOhne.Cells(i, 1).Value = wsMit.Cells(j, 1).Value
            End If
        Next j
    Next i
    
    ' Speichern und Schließen der Dateien
    wbOhne.Save
'    wbOhne.Close False
'    wbMit.Close False
End Sub
 
Hallo, habe den Code berichtigen können. Danke für die Unterstützung.
Hier mein Ergebnis:

Visual Basic:
   Private Sub CommandButton1_Click()

    Dim wsMit As Worksheet
    Dim wsOhne As Worksheet
    Dim letzteZeileMit As Long
    Dim letzteZeileOhne As Long
    Dim i As Long
    Dim valueOhne As String
    Dim dictMit As Object ' Dictionary für Tabelle2 (wsMit)
    Dim pfadMit As String
    Dim pfadOhne As String
    
    ' Variablen für die Arbeitsmappen
    Dim wbMit As Workbook
    Dim wbOhne As Workbook
    Dim dateiMitGeöffnet As Boolean
    Dim dateiOhneGeöffnet As Boolean

    ' Dateipfade definieren (bitte anpassen)
    pfadMit = "C:\Users\Besitzer\Desktop\ListemitA1.xlsx"
    pfadOhne = "C:\Users\Besitzer\Desktop\ListeohneA1.xlsx"

    ' --- Quell- und Ziel-Dateien öffnen ---
    On Error Resume Next
    Set wbMit = Workbooks.Open(pfadMit) ' Versuche, die Quell-Datei zu öffnen
    If wbMit Is Nothing Then
        MsgBox "Die Datei 'ListemitA1.xlsx' konnte nicht geöffnet werden.", vbCritical
        Exit Sub
    End If
    Set wbOhne = Workbooks.Open(pfadOhne) ' Versuche, die Ziel-Datei zu öffnen
    If wbOhne Is Nothing Then
        MsgBox "Die Datei 'ListeohneA1.xlsx' konnte nicht geöffnet werden.", vbCritical
        wbMit.Close SaveChanges:=False
        Exit Sub
    End If
    On Error GoTo 0 ' Fehlerbehandlung wieder ausschalten

    ' Setze die Arbeitsblätter
    Set wsMit = wbMit.Sheets("Tabelle1") ' Tabelle1 der Quell-Datei
    Set wsOhne = wbOhne.Sheets("Tabelle1") ' Tabelle1 der Ziel-Datei

    ' Finde die letzte verwendete Zeile in beiden Blättern (in Spalte 1 - A)
    letzteZeileMit = wsMit.Cells(wsMit.Rows.Count, 1).End(xlUp).Row
    letzteZeileOhne = wsOhne.Cells(wsOhne.Rows.Count, 1).End(xlUp).Row

    ' Initialisiere das Dictionary
    Set dictMit = CreateObject("Scripting.Dictionary")

    ' Lade die Daten aus Spalte B von "Tabelle1" (wsMit) in das Dictionary
    For i = 1 To letzteZeileMit
        Dim valueMit As String
        valueMit = Trim(wsMit.Cells(i, 2).Value) ' Trim entfernt überflüssige Leerzeichen

        ' Wenn der Wert nicht leer ist und noch nicht im Dictionary enthalten, füge ihn hinzu
        If valueMit <> "" And Not dictMit.exists(valueMit) Then
            dictMit.Add valueMit, wsMit.Cells(i, 1).Value ' Speichere Spalte A als Wert, Spalte B als Schlüssel
        End If
    Next i

    ' Überprüfe, ob das Dictionary korrekt befüllt wurde
    If dictMit.Count = 0 Then
        MsgBox "Fehler: Keine Daten in Tabelle1 der Quell-Datei gefunden oder alle Zellen in Spalte B sind leer.", vbCritical
        wbMit.Close SaveChanges:=False
        wbOhne.Close SaveChanges:=False
        Exit Sub
    End If

    ' Vergleiche die Daten von Tabelle1 (wsOhne) in der Ziel-Datei mit den Daten aus dem Dictionary
    For i = 1 To letzteZeileOhne
        valueOhne = Trim(wsOhne.Cells(i, 2).Value) ' Trim entfernt überflüssige Leerzeichen

        ' Prüfe, ob der Text in Tabelle1 der Ziel-Datei (wsOhne) im Dictionary vorhanden ist
        If valueOhne <> "" And dictMit.exists(valueOhne) Then
            ' Wenn der Wert existiert, kopiere den zugehörigen Wert aus der Quell-Datei (Spalte A) nach Tabelle1 (Spalte A) in der Ziel-Datei
            wsOhne.Cells(i, 1).Value = dictMit(valueOhne)
        End If
    Next i

    ' Speichern und Schließen
'''    wbOhne.Close SaveChanges:=True ' Ziel-Datei speichern und schließen
       wbOhne.Save
'''    wbMit.Close SaveChanges:=False ' Quell-Datei schließen ohne Speichern
       wbMit.Save

    MsgBox "Datenvergleich und Kopiervorgang abgeschlossen.", vbInformation
End Sub
 
Zurück