Anzeige
Archiv - Navigation
1636to1640
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

Excel-Dateien auslesen

Excel-Dateien auslesen
03.08.2018 08:17:35
Tom
Hallo,
ich habe immer noch keine Lösung für die folgende Aufgabe.
Auf dem Server werden unter einem Ordner weitere Unterordner angelegt in denen sich Excel-Dateien befinden. In der Regel enthält ein Ordern eine Excel Datei. Ich möchte den Inhalt der Excel Dateien aus jedem Ordner in eine Datei auslesen und den Inhalt auswerten.
Hat einer eine Idee?
Gruß Tom

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tip
03.08.2018 11:14:37
Tom
Hallo,
über Power Query habe ich es schon versucht, komme damit aber nicht zum Ziel.
Ein anderer Ansatz wäre, per Code die xlsx Dateien aus den Ordnern zu kopieren und in nur einen Ordner abzulegen. Ist das möglich?
Gruß Tom
Anzeige
PQ nur versucht oder lt.Beschreibung im Link?
03.08.2018 12:09:41
robert
Hi,
wenn Du die Schritte machst wie sie vorgegeben sind, geht es super:-)
Gruß
robert
Excel-Dateien auslesen
03.08.2018 16:04:16
Tom
Hi,
habe ich gemäß der Beschreibung versucht. Es sind zu viele Variablen und zu viele Zeilen enthalten. Ich sehe nur die Lösung in dem ich aus den Ordnern die Sheets kopieren lasse und dann per Code den Bereich auslesen lasse, nur fehlt mir bisher leider noch die Kopierfunktion über VBA ;-)
Gruß Tom
ein Lösungsansatz mit DIR
05.08.2018 11:58:43
Oberschlumpf
Hi Tom,
hier, versuch mal (nur teilweise getestet!)
https://www.herber.de/bbs/user/123144.zip
Die ZIP-Datei enthält 2 Dateien:
tom.xlsm
dir.cmd
Beide Dateien müssen im selben Verzeichnis gespeichert werden!
Aufgabe von dir.cmd:
Die cmd-Datei muss mit einem Parameter gestartet werden, den sie aus dem Code in tom.xlsm erhält.
(dir.cmd also nicht allein mit Doppelklick starten)
Bei dem Parameter handelt es sich um das Netzwerkverzeichnis, aus dem du in allen Unterordnern alle Excel-Dateien auslesen willst.
Beachte alle Hinweise in meinem Code.
Nach korrektem Aufruf von dir.cmd werden aus dem angegebenen Netzwerkverzeichnis UND allen Unterverzeichnissen der jeweils vollständige Speicherort jeder gefundenen Excel-Datei in der txt-Datei "dir.txt" gespeichert.
Aufgabe von tom.xlsm:
Nachdem nun die txt-Datei dir.txt erstellt wurde, wird diese Datei per Code geöffnet, und alle Einträge werden zeilenweise ausgelesen.
1. Zeile 1 aus dir.txt wird ausgelesen
2. die Excel-Datei aus Zeile 1 wird geöffnet
3. aus Excel-Datei/Tabelle1 wird der Bereich A1:B2 kopiert und in tom.xlsm/Tabelle1 in die nächste, freie Zeile in Spalte A eingefügt *Hinweis unten*
4. Excel-Datei aus Zeile 1 wird ohne Speichern geschlossen
5. Zeile 2 aus dir.txt wird ausgelesen
6. die Excel-Datei aus Zeile 2 wird geöffnet
7. aus Excel-Datei/Tabelle1 wird der Bereich A1:B2 kopiert und in tom.xlsm/Tabelle1 in die nächste, freie Zeile in Spalte A eingefügt *Hinweis unten*
8. Excel-Datei aus Zeile 1 wird ohne Speichern geschlossen
9. es wiederholen sich die Punkte 1. - 4. usw. mit dem Unterschied, dass aus dir.txt die jeweils nächste Zeile ausgelesen wird.
Nachdem alle Zeilen aus dir.txt ausgelesen + verarbeitet wurden, wird dir.txt gelöscht.
*Hinweis*
Ich weiß nicht, ob die Excel-Dateien, um die es dir geht, die gesuchten Werte in Tabelle1, bzw. 1. Tabelle in der Auflistung aller Tabellen enthalten.
Ich weiß nicht, ob die Excel-Dateien, um die es dir geht, im Bereich A1:B2 Werte enthalten.
(wenn nicht, wird der Code wohl mit Fehler oder gar nicht reagieren)
Ich weiß nicht, ob die Excel-Dateien, um die es dir geht, immer gleich aufgebaut sind.
(wenn nicht, ist der automatisierte Ablauf, wie von mir programmiert, nicht möglich)
All das, was ich nicht weiß, weiß ich nicht, weil du keine Angaben dazu gemacht hast.
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: ein Lösungsansatz mit DIR
06.08.2018 10:50:18
Tom
Hi Thorsten,
erst einmal Danke!
Ich habe den Parameter angepasst und die CMD ausführen und danach das Makro laufen lassen. Es kommt die Fehlermeldung "400"! Die Ursache habe ich bisher noch nicht gefunden.
Der erste Teil erstellt die Text Datei und führt alle darin enthaltenen Dateien auf. Danach stockt es wegen dem Fehler.
Zu Deinen Hinweisen.
Die gesuchten Werte befinden sich in der Tabelle3 „Protokoll“ und die Werte werden aus dem Bereich T7-Z bis zur letzten Zeile benötigt. Und zuletzt ja die Dateien sind alle gleich aufgebaut. Anbei eine Musterdatei die ich auslesen lassen möchte.
https://www.herber.de/bbs/user/123156.zip
Gruß Tom
Anzeige
AW: ein Lösungsansatz mit DIR
06.08.2018 18:01:52
Oberschlumpf
Hi Tom,
Ich habe den Parameter angepasst und die CMD ausführen und danach das Makro laufen lassen.
Was genau meinst du damit?
Hast du den Parameter %1 direkt in der cmd geändert, dann direkt die cmd und erst dann das Makro gestartet?
Oder hast du den Parameter im Makro angepasst, und dann nur das Makro gestartet, welches die cmd "von allein" aufruft?
(bei dieser Vermutung von mir hast du dich leider unglücklich ausgedrückt)
nächste Verwirrung:
Die gesuchten Werte befinden sich in der Tabelle3 „Protokoll“
In deiner Bsp-Datei hat von allen sichtbaren Tabellen die 2. Tabelle den Namen "Protokoll". Die 3. Tabelle heißt "Protokoll LUB Abgleich".
Allerdings hat deine 3. Tabelle keine Werte in den Spalten T bis Z.
Ich frage trotzdem lieber mal.
Ciao
Thorsten
Anzeige
AW: ein Lösungsansatz mit DIR
06.08.2018 21:11:26
Günther
Moin Tom,
also, wenn sich alle relevanten *.xlsx in 1 Folder befinden, ist das schon von Vorteil ...
Und wenn du dieses Zwischenergebnis (wie im Anhang) für die Auswertung haben möchtest, dann kann ich dir sagen: Das ist mit Power Query und einer einzigen (kurzen) Formel erstellt worden. ;-)
https://www.herber.de/bbs/user/123175.xlsx
Gruß
Günther
AW: ein Lösungsansatz mit DIR
08.08.2018 11:55:41
Tom
Mahlzeit Günther,
ich schau mir das noch einmal an, aber nach der Anleitung im Link habe ich es nicht hinbekommen. Excel konnte die Daten nicht verarbeiten, weil zu viele Datensätze. Ich versuche es noch weiter einzufiltern, meine Power Query Kenntnisse sind aber eher bescheiden.
Viele Grüße Tom
Anzeige
AW: ein Lösungsansatz mit DIR
08.08.2018 12:07:20
Günther
Moin Tom,
Excel kann in der Tat nur ~1 Mio Datensätze (Zeilen) in 1 Tabellenblatt speichern. Power Query hingegen kann mehrere Millionen Datensätze verarbeiten. Die müssen (natürlich) vor dem Schließen & laden so gefiltert werden, dass die maximale Zeilen-Zahl nicht überschritten wird. Notfalls die Daten in mehrere Abfragen splitten.
Und wo "hakt" es denn mit der Anleitung? Es ist naturgemäß schwierig, ein komplexes Thema so aufzubereiten, dass JEDER Leser alles genau so versteht, wie es gemeint ist. Vielleicht kann ich ja ein wenig "Nachhilfe" geben, ich kenne den Inhalt des Links recht gut ...
Gruß
Günther
Anzeige
AW: ein Lösungsansatz mit DIR
08.08.2018 15:41:44
Tom
Hallo Günter,
hm…dann liegt es wohl doch an mir!
Eigentlich ist die Anleitung verständlich und umsetzbar, jedoch sehe ich schon, mir fehlt das Wissen. Meine Abfrage endet immer mit einem Fehler.
Wenn ich im Vergleich Deine Abfrage betrachte, sind bei Dir ja schon mal die Überschriften korrekt übernommen worden. Wobei der Weg über eine Tabelle direkt ohne die Ordnerstruktur einfacher umsetzbar scheint, wo wir wieder bei meinem fehlenden Wissen sind ;-)
Anbei meine Abfrage anhand der Anleitung und ein Teil der Ordner die ich Abfragen möchte. Ich habe es zum Testen unter C:\Blaue Punkte angelegt.
Ich möchte z.B. auch nur das Tabellenblatt „Protokoll“ und den Bereich T7-Z auswerten. Sobald ich die benutzerdefinierte Spalte Überschriften einfüge, wird mir teilweise ein Error in der neuen Spalte angezeigt und nach dem Laden in die Excel-Tabelle wird mir der „Ungültiger Zellenwert '#N/A'“ angezeigt.
https://www.herber.de/bbs/user/123208.zip
https://www.herber.de/bbs/user/123210.zip
Wo liegt der Fehler?
Gruß Tom
Anzeige
AW: ein Lösungsansatz mit DIR
07.08.2018 14:47:57
Tom
Hi Thorsten,
ja sehr unglücklich ausgedrückt und auch vom mir nicht ganz korrekt durchgeführt. Sorry...Dann noch einmal…
Beide Dateien tom.xlsm und dir.cmd habe ich in einem Ordner abgelegt der über dem Unterordner liegt aus dem ich die Dateien auslesen möchte.
In dem Code von tom.xlsm habe ich den Pfad angepasst. Der Pfad lautet wie folgt: C:\Blaue Punkte\Blaue Punkte neu.
Unter diesem Pfad liegen auch die beiden Dateien von Dir! Die weitere Struktur sieht dann so aus…
C:\Blaue Punkte\Blaue Punkte neu\1\ Mappe1.xlsx
C:\Blaue Punkte\Blaue Punkte neu\2\ Mappe2.xlsx
usw…
Wenn ich das Makro sbXL_Files jetzt ausführen lasse, bekomme ich den Fehler „Datei nicht gefunden“.
Mache ich etwas falsch?
lt. den VBA Eigenschaften handelt es sich und die Tabelle3 namens Protokoll (2. Reiter), die ich immer auslesen lassen möchte? Wie auch immer, ich benötige die Werte aus der Tabelle „Protokoll“. In der Tabelle Protokoll LUB Abgleich sind keine Werte enthalten, korrekt.
Grüße Tom
Anzeige
AW: ein Lösungsansatz mit DIR
08.08.2018 07:11:27
Oberschlumpf
Hi Tom,
was soll ich sagen? Hab eben mit deinem Verzeichnis mal getestet, und....es funktioniert...nicht!
Mist.
Was da schief läuft, weiß ich noch nicht. Muss jetzt aber erst mal Geld verdienen :-) Heute Abend meld ich mich noch mal.
Ciao
Thorsten
läuft...zumindest bei mir :-)
08.08.2018 18:38:38
Oberschlumpf
Hi Tom,
hier, teste mal
https://www.herber.de/bbs/user/123216.zip
Zuerst wieder entpacken; gern ins Verzeichnis "C:\Blaue Punkte\Blaue Punkte neu".
Starte die Excel-Datei. Im Makro steht als Start-Verzeichnis schon "C:\Blaue Punkte\Blaue Punkte neu" drin.
Deine Daten-Testdatei (und sicher auch deine Realdateien) enthält verbundenen Zellen.
Nach Öffnen jeder Datei werden im Bereich T7:Zxx alle Zellenverbunde gelöscht.
Der Bereich T7:Zxx wird 1:1 in die Tabelle1 übertragen, in der sich auch das Makro befindet.
Daten-Datei wird ohne Speichern geschlossen (so bleiben auch die verbundenen Zellen erhalten).
Nächste Daten-Datei wird geöffnet, Daten werden kopiert, Datei wird geshclossen, usw.
Hilfts?
Bei mir funktioniert alles.
(D)ein Problem könnte noch sein:
In all deinen Beiträgen hast du nie verraten, wohin denn die zu kopierenden Werte aus T7:Zxx kopiert werden sollen.
Wenn mein Vorgehen, alles in Spalte A, immer ab nächste, leere Zeile einfügen, falsch ist, dann musst du das Ziel, wohin die Daten eingefügt werden sollen, korrigieren.
Ciao
Thorsten
(bedenke, dass dieser Thread wohl bald im Archiv verschwindet)
Anzeige
AW: läuft...zumindest bei mir :-)
09.08.2018 07:42:16
Tom
Morgen Thorsten,
danke, aber es läuft bei mir leider nicht. Es kommt die Fehlermeldung Datei nicht gefunden und im Code bleibt es bei "Open ThisWorkbook.Path & "\dir.txt" For Input As #1" stehen.
Die dir.txt wird angelegt und enthält den folgenden Text. Also eigentlich i.O.
C:\Blaue Punkte\Blaue Punkte neu\tom.xlsm
C:\Blaue Punkte\Blaue Punkte neu\75256\75256.xlsx
C:\Blaue Punkte\Blaue Punkte neu\75322\75322.xlsx
Ich habe auch nur nur die Testdateien verwendet...
Das Ziel in der Spalte A ist für mich i.O.
Warum es bei Dir läuft und bei mir nicht?
Gruß Tom
diesmal mit vb-script...funktioniert bei mir auch
09.08.2018 18:11:43
Oberschlumpf
Hi Tom,
versuch das hier
https://www.herber.de/bbs/user/123240.xlsm
Die cmd-Datei wird nicht mehr benötigt, kannst du löschen.
Hilfts?
Wenn auch wieder nein, weiß ich nix mehr.
Ciao
Thorsten
AW: diesmal mit vb-script...funktioniert bei mir auch
10.08.2018 08:02:00
Tom
Guten Morgen Thorsten,
vielen Dank für Deine Zeit und den Grips den Du hinein gesteckt hast.
Anhand von der Testdatei läuft es!!!! Wenn ich jedoch mehrere Dateien einlesen möchte, kommt ein Fehler. Das liegt aber vermutlich daran dass in einigen Dateien weitere verbundene Zeilen vorhanden sind. Muss ich mir mal genau anschauen. Ich kann aber damit arbeiten und es ist schon einmal ein Anfang. Der Weg über Power Query ist hier vielleicht der sinnvollere Weg.
Noch einmal vielen Dank & viele Grüße
Tom
AW: diesmal mit vb-script...funktioniert bei mir auch
10.08.2018 16:20:14
Oberschlumpf
Hi Tom,
da es ja nur um die Spalten T bis Z geht, ändere diesen Code

For lloNoMerge = 7 To .Cells(Rows.Count, 15).End(xlUp).Row
If .Range("T" & lloNoMerge).MergeCells Then
.Range("T" & lloNoMerge).UnMerge
End If
Next

um in

Dim lloCol As Long
For lloNoMerge = 7 To .Cells(Rows.Count, 20).End(xlUp).Row
For lloCol = 20 To 26
If .Cells(lloNoMerge, lloCol).MergeCells Then
.Cells(lloNoMerge, lloCol).UnMerge
End If
Next
Next

Mit For lloCol = 20 To 26 werden alle Spalten von T (20) bis Z (26) geprüft, ob deren Zellen verbunden sind.
Ich hatte in deiner Test-Datendatei nur die Spalte F überprüft, weil, wenn verbunden, dann alle Zellen in der gefundenen Zeile.
Sollte es in deinen Originaldateien auch Spalten VOR Spalte T geben, die verbundene Zellen enthalten, dann verringer einfach den Wert 20 so weit wie erforderlich.
Anstelle von 20 = 1 würdest du in Spalte A mit der Suche nach Zellverbünden beginnen.
Ciao
Thorsten
Ciao
Thorsten

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige