froschkoenig-lr
Goto Top

Excel VB Makro - Suchen und Ersetzen zwischen 3 Tabellen

Hallo zusammen,

ich würde gerne 3 Tabellen eines bestehenden Excel-Dokuments (.xls) vergleichen und die Zeilen übertragen.
Im Internet wird zu einem Makro über Visual-Basic geraten, um so ein Vorhaben sinnvoll zu realisieren.

Natürlich begab ich mich gleich auf die Suche, da es ja reichlich Makro-Templates für Excel im Internet gibt, aber wie es eben so ist nicht maßgeschneidert auf meine Vorstellung.
Hinzu kommt, dass keine Visual-Basic Programmierkenntnisse vorhanden sind.

Aber vielleicht hat jemand von euch ein Quellcode aus früheren Tagen noch herumliegen, der nur noch angepasst werden müsste...das wäre natürlich ein Traum. face-wink

Kurzum, ich erläutere was das Makro genau tun soll:

1. Wenn in Spalte "D" in Tabelle "COR" "Keine Mängel" steht, nimm Nummer aus Spalte "A" in Tabelle "COR" und suche/ersetze in Spalte "A" in Tabelle "PRO" oder Tabelle "VER" ab Zeile 8 den Zeileninhalt der Spalten "B-F".
2. Wenn in Spalte "D" in Tabelle "COR" "Reparatur erforderlich" steht, nimm Nummer aus Spalte "A" in Tabelle "COR" , suche/ersetze in Spalte "A" in Tabelle "PRO" oder Tabelle "VER" ab Zeile 8 den Zeileninhalt der Spalten "B-F", markiere die gesamte Zeile rot und kopiere den Zeileninhalt von Spalten "B-F" aus Tabelle "COR" nach Tabelle ""Reparatur erforderlich".

Kann mir jemand weiterhelfen?
Das Makro würde mir den Alltag jedenfalls enorm erleichtern.

SG,
Froschkönig

Content-ID: 504833

Url: https://administrator.de/contentid/504833

Ausgedruckt am: 24.11.2024 um 10:11 Uhr

141320
141320 15.10.2019, aktualisiert am 16.10.2019 um 10:34:41 Uhr
Goto Top
Das Makro würde mir den Alltag jedenfalls enorm erleichtern.
Na dann prost
https://we.tl/t-yjkSgiBj1N

Gruß
Froschkoenig-LR
Froschkoenig-LR 16.10.2019 um 07:18:37 Uhr
Goto Top
Guten Morgen nc6400,

vielen Dank für den Quellcode, habe mich riesig darüber gefreut. face-smile

Habe diesen heute früh getestet und es erscheint beim betätigen des Buttons "Start Macro" folgende Fehlermeldung:
"Objekt erforderlich"

Habe versucht nach bestem Wissen die Debugfunktion zu nutzen, worüber ich vielleicht sehe wo ich im Quellcode hängen bleibe. (siehe Screenshot)

Was mache ich falsch?
1
2
141320
141320 16.10.2019 aktualisiert um 10:53:26 Uhr
Goto Top
Hatte nachträglich nur eine Variable vom Typ her falsch deklariert, nochmal runterladen ist korrigiert.

Tschö.
Froschkoenig-LR
Froschkoenig-LR 16.10.2019 um 11:20:08 Uhr
Goto Top
Hi,

du hattest ja nur den Quellcode angepasst, da ich nur diesen übernommen habe.
Dennoch wird die genannte Fehlermeldung beim Schritt in die zweite Zeile (siehe Bild) generiert...

Woran kann dies liegen?
1
141320
Lösung 141320 16.10.2019 aktualisiert um 12:51:45 Uhr
Goto Top
Zitat von @Froschkoenig-LR:

Hi,

du hattest ja nur den Quellcode angepasst, da ich nur diesen übernommen habe.
Nochmal vom neuen Link runterladen den ich oben angepasst habe https://we.tl/t-yjkSgiBj1N !!! Funktioniert einwandfrei in der Demo-Datei.

Dennoch wird die genannte Fehlermeldung beim Schritt in die zweite Zeile (siehe Bild) generiert...

Woran kann dies liegen?
Dann hast du es falsch angepasst/bearbeitet!
Froschkoenig-LR
Froschkoenig-LR 17.10.2019 um 06:23:33 Uhr
Goto Top
Hallo nc6400,

du hattest recht, habe die Datei neu geladen, meinen Inhalt testweise rein kopiert und getestet.
Es funktioniert.

Werde den Ablauf die nächsten Tage ausführlicher testen, hoffe nicht dass noch etwas hinzukommt. face-wink

Vielen Dank nochmal. face-smile

SG
Froschkoenig-LR
Froschkoenig-LR 30.10.2019 aktualisiert um 12:30:13 Uhr
Goto Top
Guten Morgen,

ich müsste diesen Fall noch einmal aufrollen.

Mir ist aufgefallen, dass bei dem Import neue Nummern in Spalte A der Arbeitsmappe COR die nicht in den Spalten A der Arbeitsmappen PRO oder VER enthalten sind NICHT übernommen werden.

Können diese Zeilen in Arbeitsmappe COR & PRO am Ende angehängt werden, mit 3 Leerzeilen vorweg?

Hier der soweit funktionierende Quellcode:
Sub Datenübernahme()
    Dim shCOR As Worksheet, shPRO As Worksheet, shVER As Worksheet, shREPARATUR As Worksheet, colKeineMängel As New Collection, colReparaturErforderlich As New Collection
    Dim c As Range, firstAddress As String, itm As Variant, tbl As Variant, col As Variant
    
    Set shCOR = Sheets("COR")  
    Set shPRO = Sheets("PRO")  
    Set shVER = Sheets("VER")  
    Set shREPARATUR = Sheets("REP")  
    
    MsgBox "Datenübernahme gestartet...", vbInformation  
    With shCOR
        Set rngSearch = .Range("D2:D" & .Cells(Rows.Count, "D").End(xlUp).Row)  
        ' Suche "Keine Mängel"  
        Set c = rngSearch.Find("Keine Mängel", LookIn:=xlValues)  
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                colKeineMängel.Add c.Offset(0, -3).Resize(1, 6)
                Set c = rngSearch.FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
        ' Suche "Reparatur erforderlich"  
        Set c = rngSearch.Find("Reparatur erforderlich", LookIn:=xlValues)  
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                colReparaturErforderlich.Add c.Offset(0, -3).Resize(1, 6)
                Set c = rngSearch.FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    
    For Each tbl In Array(shPRO, shVER)
        With tbl
            Set rngSearch = .Range("A8:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            For Each col In Array(colKeineMängel, colReparaturErforderlich)
                For Each itm In col
                    Set c = rngSearch.Find(itm.Cells(1, 1).Value, LookIn:=xlValues)
                    If Not c Is Nothing Then
                        firstAddress = c.Address
                        Do
                            itm.Copy Destination:=c
                            If itm.Cells(1, 4).Value = "Reparatur erforderlich" Then  
                                c.EntireRow.Interior.Color = vbRed
                            End If
                            Set c = rngSearch.FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                Next
            Next
        End With
    Next
    For Each itm In colReparaturErforderlich
    Set rngDest = shREPARATUR.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  
        itm.Copy Destination:=rngDest
        rngDest.EntireRow.Interior.Color = vbRed
    Next
    MsgBox "Datenübernahme erfolgreich abgeschlossen!", vbInformation  
End Sub

Viiielen Dank für die Hilfe. face-smile