Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeilen von div. Arbeitsmappen übertragen
#1
Hallo
ich habe keine grosse Ahnung von vba und hoffe somit auf Hilfe von einem Profi.
Wir haben ein Excel Arbeitsmappe, welches von mehreren Personen jeweils als als copy benutzt wird. Innerhalb der Arbeitsmappe wird in es ein Tabellenblatt eine Zeile mit ca. 30 Spalten generiert. Nun möchten wir diese Zeile von der jeweiligen Arbeitsmappe in eine zentrale Arbeitsmappe übertragen und bei Änderungen bei der Source, diese auch wiederum in der zentralen Arbeitsmappe nachführen. 

Ich habe etwas "gebastelt" und wenigstens wird ein Eintrag schon Mal übertragen, aber der Update funktioniert in dem Sinne nicht, weil jeweils eine neue Zeile erstellt wird.

Option Explicit

Sub Service_Offering_Update()
    Application.ScreenUpdating = False
    Dim LastRow As Long
    Workbooks.Open "Dateiupload bitte im Forum - wie's geht: http://www.clever-excel-forum.de/thread-326.html ."
    Workbooks("Estimator 2.5.xlsm").Worksheets("Offering").Activate
    LastRow = Range("Offering").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Dim rng As Range
    Dim foundVal As Range
    For Each rng In Sheets("Offering").Range("A5:A" & LastRow)
        Set foundVal = Workbooks("Servicematrix.xlsx").Sheets("Servicematrix").Range("A:A").Find(rng, LookIn:=xlValues, lookat:=xlWhole)
            If foundVal Is Nothing Then
                rng.EntireRow.Copy
                Workbooks("Servicematrix.xlsx").Sheets("Servicematrix").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
            Else
                rng.EntireRow.Copy
                Workbooks("Servicematrix.xlsx").Sheets("Servicematrix").Cells(Rows.Count, "A").End(xlUp).Offset(0, 0).PasteSpecial xlPasteValues
            End If
    Next rng
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
Antwortento top
#2
Hallöchen,

Zitat:aber der Update funktioniert in dem Sinne nicht, weil jeweils eine neue Zeile erstellt wird.

prüfe mal, ob was gefunden wird und wenn nicht, warum. Eine neue Zeile wird ja nur erstellt, wenn es keine Treffer gibt. Nimm dazu z.B. mal rng.Value in die Überprüfung und schaue selbst nach, ob der Inhalt vorhanden ist. Prüfe auch, ob eventuelle Leerzeichen das Ergebnis verfälschen.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#3
Hallo Schauan Danke für die schnelle Hilfe
Wie gesagt ich bin kein Hero in vba, ist schon ein Wunder dass wenigstens ein Teil vom Script funktioniert. Ein Auszug der Quelldatei hat im Bsp. zwei Zeilen.
Änderungen an der Zeile mit Kunde B, werden in der Zieldatei sauber nachgeführt. Im Prinzip wird eine Änderung auch bei Kunde A übertragen, nur wird leider jedesmal wenn das Script ausgeführt wird eine Copy vom Kunden A erstellt (siehe Zieldatei 3x Ausführung)

[ Bild bitte als Datei hochladen! ]

[ Bild bitte als Datei hochladen! ]
Füge ich in der Quelldatei einen dritten Kunden ein, dann wird der vorerst mal richtig übertragen, dann wird aber jeweils der Kunde B dupliziert und Änderungen bei Kunden A werden nicht mehr erkannt. 
[ Bild bitte als Datei hochladen! ]
Die Zieldatei sieht die Zieldatei immer schlimmer aus  Huh 
[ Bild bitte als Datei hochladen! ]

Zu erwähnen ist vielleicht noch, dass eigentlich pro Quelldatei immer nur eine Zeile mit einem Kundeneintrag bestehen wird.
Ich trage nur mehrere Kunden ein, um den Use Case zu simulieren. 

Zu Deinem Hinweis bzw Tipp, wie kann ich den rng.Value prüfen? (sorry, bin eben kein Hirsch)
Antwortento top
#4
Hallöchen,

die Bilder sieht man nicht, die müsstest Du hier hochladen.
Zitat:Zu Deinem Hinweis bzw Tipp, wie kann ich den rng.Value prüfen?
Gehe unten in den Überwachungsbereich - falls der nicht da ist, über Ansicht ... einschalten - klicke mit der rechten Maustaste, nimm "Überwachung hinzufügen" und gib dort rng.value ein.

Klicke vor Start des Makros in die Zeile mit For Each rng.. und drücke F9, dann hast Du dort einen Haltepunkt. Dann kannst Du das Makro starten. Wenn es den Haltepunkt erreicht, hält es Smile und Du kannst unten nachschauen, was in rng.Value steht. Mit F8 kannst Du das makro dann zeilenweise ausführen, mit F5 bis zum nächsten Halt oder Ende.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#5
wieder etwas gelernt  Blush

Habe den Haltepunkt gesetzt und beim Ausführen steht dort "nothing".
Wenn ich im Einzelschritt durchgehe, dann steht jeweils auf der nächsten Zeile (gelb) der erste Wert aus der Quelldatei, also "A".
Beim zweiten Durchlauf entsprechend "B" und danach "C"

habe 3 Bildeli dazu hochgeladen, hoffe das hilft

Bei der Arbeitsmappe mit der Quelle, liegen die Daten im Tabellen Offering und sind dort als Tabelle formatiert
Bei der Zieldatei hätte ich eigentlich auch gerne eine Tabelle gehabt, aber damit funktioniert mein Script noch weniger, d.h die kopierten Einträge werden dann jeweils unter die Tabelle geschrieben. Das ist aber vorerst wohl das kleinere Problem  Huh


Angehängte Dateien Thumbnail(s)
           
Antwortento top
#6
Hallöchen,

das Nothing zeigt Dir, dass da was nicht korrekt läuft. Dann könnte man etwas eher ansetzen und z.B. LastRow prüfen.
Nur mal als Hinweis:
LastRow = Range("Offering").... funktioniert nur, wenn Du auf dem Blatt Offering auch einen benannten Bereich Offering hast. Hast Du doch, oder nicht?
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#7
Hallo

sorry für die verspätete Antwort, ich war kurz offline
In der Zwischenzeit konnte das Problem dank externer Unterstützung, unter Verwendung der von Dir vorgeschlagenen LastRow innerhalb eines Namensbereichs gelöst werden.

Danke nochmals für Deine Hilfe
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste