Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Inhalte mehrerer Files zusammenführen

Inhalte mehrerer Files zusammenführen
30.04.2020 18:42:07
Gabi
Hallo liebe Excel-Freunde,
habe das Netz durchsucht und viele ähnliche Beispiele gefunden, aber leider war keine Lösung dabei, die zu 100% passt.
Daher hoffe ich, dass mir jemand von Euch weiterhelfen kann.
Ich möchte per VBA den Inhalt von mehreren Dateien in eine einzige Zieldatei übertragen.
Hier die Details:
Die Quelldateien (alles xlsm-Dateien mit dem Namen "*-2020.xlsm" liegen im Verzeichnis c:\benutzer\reports.
In jeder Datei gibt es eine Lasche mit dem Namen "Übersicht", aus der ich die Daten ziehen will.
Die Überschriften stehen in den Zellen A1 bis F1.
Ab der zweiten Zeile beginnen die eigentlichen Daten, die übertragen werden sollen.
Die Spalten sind immer die gleichen (A bis F). Allerdings sind die Zeilen unterschiedlich, mal gehen die Einträge bis Zeile 100, mal bis Zeile 200. Daher müßte das Makro den letzten Eintrag in Spalte A finden, um den jeweils zu übertragenden Bereich festlegen zu können (A2:F100 bzw. A2:F200)
Zusätzlich gibt es eine Masterdatei.
In diese Datei sollen per Makro die Inhalte aus den Quelldateien übertragen werden (allerdings nur Werte, keine Formeln oder Formate), und zwar in die Lasche "Zusammenfassung" immer untereinander, beginnend in Zelle A2.
Ganz wichtig ist, dass sich das Makro die Daten aus den geschlossenen Dateien holt, also diese nicht öffnen muss.
Würde mich total freuen, wenn jemand helfen könnte.
Viele Grüße
Gabi

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalte mehrerer Files zusammenführen
30.04.2020 18:56:23
Oberschlumpf
Hi Gabi,
a) wieso dürfen die Dateien zum Auslesen der Daten nicht geöffnet werden?
b) welche XL-Version nutzt du denn? Das kann durchaus eine Rolle spielen und ist nicht nicht relevant.
c) kannst du bitte 2 oder 3 deiner auszulesenden Dateien mit Bsp-Daten UND den enthaltenden Makros per Upload zur Verfügung stellen?
(ich glaub nicht, dass jemand Lust hat, für den zu erstellenden VBA-Code für dich erst mal mehrere Dateien mit Bsp-Daten befüllen muss)
Ciao
Thorsten
AW: Inhalte mehrerer Files zusammenführen
30.04.2020 20:43:46
Gabi
Hallo Thorsten,
a) es sind mehr als 60 Dateien mit jeweils 6 MB. Ich denke es würde schneller gehen, wenn man die Daten aus der geschlossenen Datei übernimmt
b) Excel für Office 365 MSO (16.0.12325.20280) 32-bit
c) Habe ein zip-file angehängt mit stark vereinfachten Beispieldaten und ohne Makros. Ich hoffe, das geht so in Ordnung.
Viele Grüße
Gabi
https://www.herber.de/bbs/user/137163.zip
Anzeige
AW: Inhalte mehrerer Files zusammenführen
01.05.2020 06:49:50
Oberschlumpf
Hi Gabi,
ich weiß nicht, ob es schneller geht, wenn die Dateien geschlossen bleiben, aber ich weiß zumindest, dass die Programmierung komplizierter ist, aus geschlossenen Dateien Daten auszulesen.
Und nein, ohne Makros ist es leider nicht ok. Und optimal wäre es, wenn zumindest 1 oder 2 der Bsp-Dateien genau deine Makros enthalten - was ich meine: es sollten Makros enthalten sein, die eben genau so/genau dann gestartet werden würden, wie es in deinen Originaldateien passiert.
Warum ist das so wichtig?
Hier könnte das (von mir favorisierte) Öffnen der Dateien vielleicht doch zu einem Problem werden.
Denn nur zum Auslesen der Daten willst du ja nicht, dass die Makros ausgelöst werden.
Das kann aber durchaus schon dann passieren, wenn eine Datei mit einem WorkbookOpen-Makro geöffnet wird.
Ich hab zwar ne Idee, wie das für deine Frage/Aufgabe verhindert werden kann, weiß aber noch nicht genau, ob es auch funktioniert.
Ich benötige also bitte Bsp-Dateien, die Makros an den Stellen enthalten wie auch im Original.
Ciao
Thorsten
Anzeige
warte mal mit Makros in Bsp-Dateien
01.05.2020 07:54:23
Oberschlumpf
Hi Gabi,
da ich gerade motiviert bin + Lust zum Programmieren habe, versuche ich es jetzt doch mal mit deinen Dateien ohne Makros :-)
Ich brauch natürlich n bisschen Zeit dazu, wollte dich aber hier informieren, dass du erst mal doch keine Dateien mit Makros zeigen musst.
Ciao
Thorsten
hab was für dich :-)
01.05.2020 08:28:36
Oberschlumpf
Hi Gabi,
hier, versuch mal
https://www.herber.de/bbs/user/137169.zip
Besonderheit:
Öffne bitte einfach nur die Datei Argentinien-2020.xlsm
Ich habe ein Makro eingebaut, welches direkt nach Öffnen der Datei + Aktivieren der Makros gestartet wird.
Es erscheint eine MsgBox.
Wenn du nun aber mein Makro zum Einlesen der Daten in der Datei Zieldatei.xlsm startest, wird das Makro in Argentinien-2020.xlsm - nicht! - gestartet, obwohl die Makros aktiv sind, obwohl das Makro ja eigtl eine MsgBox zeigen müsste :-)
Irritation:
Du schreibst in deinem Startbeitrag, es handelt sich - immer - um die Spalten A bis F in jeder Datei.
In deinen gezeigten Bsp-Dateien wird aber auch Spalte G verwendet.
Ich weiß nicht, ob Spalte G nun im Code doch berücksichtigt werden soll.
Ich hab den Code so programiert (wie von dir gewünscht), dass - nur die Werte aus A bis F - kopiert + eingefügt werden.
Wenn du willst, dass Spalte G nun mit beachtet werden soll, musst du meinen Code nur anpassen.
Konnte ich denn helfen?
(auf meinem PC werden alle Daten aller Dateien so kpiert + eingefügt wie von dir gewünscht)
Ciao
Thorsten
Anzeige
hast du auch was für mich?
02.05.2020 15:53:37
Oberschlumpf
Hi Gabi,
vielleicht eine Antwort auf meinen Beitrag vom 01.05.2020, um 08:28:36?
Ciao
Thorsten
AW: hast du auch was für mich?
04.05.2020 09:43:19
Gabi
Hallo Thorsten,
tut mir leid, dass ich erst jetzt antworte, aber ich war über den Feiertag und das Wochenende komplett offline. Gerne würde ich mir Dein Makro ansehen, aber aufgrund von Firmenrichtlinien darf ich Dateien von Fremden nur in der geschützten Ansicht öffnen. Könntest Du daher vielleicht den Programmcode einfach posten?
Wenn ich Dich richtig verstanden habe, ist das Makro in der Argentinien-Datei hinterlegt.
Vielleicht habe ich das nicht richtig erklärt. Das Makro soll sich eigentlich in der Zieldatei befinden. Von dort aus möchte ich die Übernahme der Daten auslösen, aber nicht automatisch nach dem Öffnen der Datei, sondern immer nur dann, wenn Bedarf besteht.
Das mit der Spalte G war übrigens ein Versehen. F ist korrekt.
Vielen Dank und Grüße
Gabi
Anzeige
AW: hast du auch was für mich?
04.05.2020 18:42:42
Oberschlumpf
Hi Gabi,
du hast doch zu Hause bestimmt auch einen Computer, oder?
Ich glaube, es ist einfacher, du lädtst dir zu Hause meine ZIP-Datei runter und entpackst vor dem Öffnen einer der Excel-Dateien erst mal alle Dateien in den gleichen Ordner.
die ZIP-Datei enthält diese Excel-Dateien:
Argentinien-2020.xlsm
Deutschland-2020.xlsm
Indien-2020.xlsm
Zieldatei.xlsm
Wenn du das geschafft hast, kannst du fast loslegen.
Denn nein, du hast mich nicht richtig verstanden. Das Haupt-Makro befindet sich in der Datei Zieldatei.xlsm.
In der Datei Argentinien-2020.xlsm befindet sich nur ein kleines Test-Makro, welches gestartet wird, wenn DU, nicht das Haupt-Makro, die Datei Argentinien-2020.xlsm einzeln startest.
Mach doch mal, NUR DIE Datei Argentinien-2020.xlsm starten - was passiert?
So, jetzt schließt du wieder die Datei Argentinien-2020.xlsm.
Und nun öffnest du die Datei Zieldatei.xlsm.
Das Makro mit dem Namen sbReadData startest du aus dem VB-Editor, den du z Bsp mit Alt-F11 anzeigen kannst.
Wenn das Makro sbReadData durchgelaufen ist, sollten, wie gewünscht - und nur bei Bedarf! - die Inhalte aus den anderen Daten-Dateien in die Zieldatei eingefügt sein.
Und das kleine Test-Makro aus der Argentinien-Datei wurde - nicht - gestartet! - auch wie gewünscht.
Na ja, und wenn du nun alles verstanden hast, dann kannst ja du selbst dir den VBA-Code per Mail an deine Firmen-Mailadresse schicken (nicht als Datei, sondern direkt als Mailtext).
Weil nach Ansicht meiner Datei weißt du, wo der VBA-Code stehen muss.
Funktionierts denn?
Ciao
Thorsten
Anzeige
AW: hast du auch was für mich?
04.05.2020 22:52:01
Gabi
Hi Thorsten,
vielen Dank für Deine Antwort.
Habe zwar privat auch ein Notebook, aber meine Office-Lizenz ist leider abgelaufen und ich habe mir noch keine neue zugelegt. Mit dem Firmenrechner kann ich wie gesagt Deinen Code nicht lesen wegen der geschützten Ansicht :-(
Dass das Makro aus der Zieldatei heraus geht ist gut. Ich verstehe nur nicht ganz, warum ich die Quelldatei vorher öffnen muss.
Also Du würdest mir echt einen Gefallen tun, wenn Du den Code hier reinkopieren könntest.
Geht das?
Viele Grüße zurück Gabi
AW: hast du auch was für mich?
04.05.2020 23:04:56
Gabi
Hallo Thorsten, ein Word oder PDF-File ginge auch, nur halt nicht xlsm.
Anzeige
AW: hast du auch was für mich?
05.05.2020 06:34:00
Oberschlumpf
Hi Gabi,
ok.
Zitat: Ich verstehe nur nicht ganz, warum ich die Quelldatei vorher öffnen muss.
Wenn du damit die datei Argentinien-2020.xlsm meinst, soll das Öffnen dieser Datei nur ein Test sein (erwähnte ich mehrmals)
Also...
in Argentinien-2020.xlsm, ins Modul DieseArbeitsmappe:

Option Explicit
Private Sub Workbook_Open()
MsgBox "Hallo, diese MsgBox sollte - nicht - erscheinen, wenn diese Datei nur zum Einlesen  _
geöffnet wurde"
End Sub

In Zieldatei.xlsm zuerst ein allgemeines Modul anlegen, in Modul1 dann dieser Code

Option Explicit
Sub sbReadData()
Dim lstrFile As String, lshThis As Worksheet
With Application
.EnableEvents = False
.DisplayAlerts = False
.ScreenUpdating = False
End With
Set lshThis = ThisWorkbook.Sheets("Zusammenfassung")
lstrFile = Dir("c:\benutzer\reports\*2020*.xls*")
'    lstrFile = Dir(ThisWorkbook.Path & "\*2020*.xls*") 'diese Zeile kannst du löschen, da auf  _
meinem PC deine Daten-Dateien im selben Verzeichnis gespeichert sind wie die Datei "Zieldatei.xlsm"
Do Until lstrFile = ""
If lstrFile  ThisWorkbook.Name Then
Workbooks.Open ThisWorkbook.Path & "\" & lstrFile, , True
With ActiveWorkbook.Sheets("Übersicht")
.Range("A2:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy
lshThis.Range("A" & lshThis.Cells(Rows.Count, 1).End(xlUp).Row + 1). _
PasteSpecial xlPasteValues
Workbooks(lstrFile).Close False
End With
End If
lstrFile = Dir
Loop
lshThis.Range("A1").Select
Set lshThis = Nothing
With Application
.EnableEvents = True
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub

In meinem Code gibt es keine Zeilenumbrüche. Die hier vorhandenen (in den Zeilen, die mit einem _ enden) werden durch die Forumssoftware erzeugt und müssen von dir wieder entfernt werden, wenn der Code deswegen nicht mehr funktioniert.
Hilfts?
Ciao
Thorsten
Anzeige
AW: hast du auch was für mich?
05.05.2020 14:43:42
Gabi
Hallo Thorsten,
genial, es hat funktioniert :-)
Es gibt allerdings noch ein kleines Problem. Das mit dem Pfad funktioniert leider nicht, wenn die Quelldateien auf einem Netzlaufwerk "\\abcd.blabla.net\abcd\reports\" liegen.
Hast Du da vielleicht eine Idee, wie ich den Code ändern müsste?
Viele Grüße Gabi
AW: hast du auch was für mich?
06.05.2020 04:35:18
Oberschlumpf
Hi Gabi
Zitat:
Das mit dem Pfad funktioniert leider nicht, wenn die Quelldateien auf einem Netzlaufwerk "\\abcd.blabla.net\abcd\reports\" liegen.
Hast Du da vielleicht eine Idee, wie ich den Code ändern müsste?

grmpfff...geh zu Aldi und kauf dir was, damit es funktioniert.
Sorry, aber...
Wie soll ich dir mit einem Hinweis wie "Das mit dem Pfad funktioniert leider nicht, wenn die Quelldateien auf einem Netzlaufwerk "\\abcd.blabla.net\abcd\reports\" liegen." helfen?
Was genau passiert denn, wenn du den - korrekten! - Netzwerkpfad im VBA-Code verwenden willst?
Ciao
Thorsten
Anzeige
AW: hast du auch was für mich?
06.05.2020 08:22:39
Gabi
Hallo Thorsten,
kann es sein, dass die Zieldatei im gleichen Verzeichnis liegen muss wie die Quelldateien?
Ich glaube das war der Grund, warum die Daten nicht eingelesen wurden. Hatte die Zieldatei auf c gespeichert und die Quelldateien auf dem Netzwerk. Jetzt, wo alles im gleichen Ordner liegt, läuft das Makro durch.
Grüße Gabi
AW: hast du auch was für mich?
06.05.2020 21:36:00
Oberschlumpf
Hi Gabi,
deine Pfadvorgabe = lstrFile = Dir("c:\benutzer\reports\*2020*.xls*")
Wenn du die obige Codezeile (deine Vorgabe) nicht anpasst, wenn die Dateien auf einmal woanders gespeichert sind, dann kann das natürlich nicht funktioneren.
Aber ok, du hast ja eine Lösung gefunden.
Ciao
Thorsten
Anzeige
AW: Inhalte mehrerer Files zusammenführen
04.05.2020 09:48:52
Gabi
Hallo eifeljoi5,
vielen Dank für Deine Antwort. Wegen Firmenrichtlinien kann ich Deine Datei leider nur in der geschützten Ansicht öffnen und den Code nicht sehen. Könntest Du mir den Gefallen tun und den Programmcode posten? Sorry und nochmal Danke.
Gabi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige