Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
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

Dateien auslesen: Dateinamen sind in einer extra T

Dateien auslesen: Dateinamen sind in einer extra T
09.05.2017 11:47:28
Isabell
Hallo Zusammen,
ich tüftle bereits seit Stunden an einer Lösung zu folgendem Problem. Hoffe ihr könnt mir helfen.
Ich möchte mehrere Tabellenblätter aus verschiedenen Dateien (die alle in einem Ordner stehen) zusammenkopieren in eine neue Datei. Das Makro dazu habe ich schon zusammen und es funktioniert.
Leider funktioniert es allerdings nur so, dass ich jede Datei in dem Ordner anspreche und nicht nur die Dateien die ich eben möchte.
Mein Ziel wäre: Nur die Dateien öffnen und das entsprechende Tabellenblatt heraus kopieren, dessen Dateiname in einer extra Datei aufgelistet ist.
Hier mein Code
Sub MWSheetsAusMehrerenDateienEinlesen1()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False 'Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ThisWorkbook
'Wichtiger Hinweis: Die Arbeitsblätter dürfen nicht vorhanden sein!
'Alternativer Umbau: Löschen evtl. bereits vorhandener Arbeitsblätter
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "\\emea.fag.com\schweinfurt\DATA\FF-SWE-K\P\Pfister\Test"
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
Do While sDatei  ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Es wird immer das erste Tabellenblatt Sheets(1) kopiert!
oSourceBook.Sheets("VS_Bridge").Copy after:=oTargetBook.Sheets(oTargetBook.Sheets. _
Count)
'Es wird versucht den Dateinamen als Arbeitsblattnamen zu setzen.
'Ist dieser bereits vorhanden wird der Fehler abgefangen und das neue Blatt
'bekommt keinen anderen Namen und behält den typischen Namen Tabelle x
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fehler aufgetreten ist, wird dieser resettet
If Err.Number  0 Then
Err.Number = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Application.DisplayAlerts = True 'Fehlermeldungen wieder anzeigen
'Kleine finale Fertig-Meldung
MsgBox "Fertig!", vbInformation + vbOKOnly, "Hinweis!"
'Variablen aufräumen
Set oTargetBook = Nothing
Set oSourceBook = Nothing
End Sub
Ich vermute, dass ich die Schleife in Schritt 2 einbauen müsste, weiß aber nicht wie das funktioniert. Meine Tabelle in der alle Dateinamen aufgelistet sind ist wie folgt aufgebaut: A1: ANA_0002_XYZ.xlsm A2: ANA_0003_ZKD.xlsm A3: ANA_0007_SSK.xlsm usw... Könnt ihr mir helfen? Danke! Gruß Isabell
https://www.herber.de/bbs/user/113436.xlsm

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien auslesen: Dateinamen sind in einer extra T
09.05.2017 11:50:31
Fennek
Hallo,
versuche anstelle von

'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "\\emea.fag.com\schweinfurt\DATA\FF-SWE-K\P\Pfister\Test"
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
einmal das:

'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "\\emea.fag.com\schweinfurt\DATA\FF-SWE-K\P\Pfister\Test"
sDatei = Dir(CStr(sPfad & "ANA_000*.xl*")) 'Alle Excel Dateien
mfg
AW: Dateien auslesen: Dateinamen sind in einer extra T
09.05.2017 11:57:20
Isabell
Hallo, danke für den Tipp.
Funktioniert aber nicht da auf dem angegebenen Pfad 100er Dateien mit gleichen Aufbau stehen und ich eben nur eine gewisse Anzahl - die in der extra Tabelle angegeben sind - möchte.
Anzeige
AW: Dateien auslesen: Dateinamen sind in einer extra T
09.05.2017 12:59:41
Fennek
Hallo,
wenn es eher wenige Dateien sind, kann man diese zuerst von Hand auswählen. Mein Muster dafür ist:

sFiles = Application.GetOpenFilename("csv-Dateien (*.csv),*.csv", MultiSelect:=True)
If IsArray(sFiles) Then
Debug.Print LBound(sFiles), UBound(sFiles)
For Each ar In sFiles
i = i + 1
Cells(i, 1) = ar
Next ar
End If
mfg
AW: Dateien auslesen: Dateinamen sind in einer extra T
09.05.2017 13:16:15
Isabell
sorry komm mit dem Muster nicht ganz klar.
Wie müsste ich das jetzt in mein Code einarbeiten? csv-Dateien durch xlsm-Dateien ersetzen.
Was muss ansonsten noch angepasst werden?
Was meinst du mit "von Hand" auswählen? es sind schon sehr viele Dateien. Je nachdem bestimmt um die 50 Dateien die ich per Hand öffnen müsste.
Eine automatisierte Lösung wäre da deutlich einfacher und zeitsparender. Da ich diese Tätigkeit monatlich durchführe.
Anzeige
AW: ein eindeutiges Kriterium!
09.05.2017 13:51:47
Fennek
Hi,
um die Dateien automatische zu öffnen, bdarf es eines eindeutigen Kriteriums, z.B. Name, Datum oder auch eine Liste.
mfg
AW: ein eindeutiges Kriterium!
09.05.2017 13:58:22
Isabell
Hallo, eine Liste habe ich.
In der stehen alle Dateinamen untereinander.
Das wäre auch mein Wunsch, anhand dieser Liste alle Dateinamen anzusprechen.
AW: Schleife über die Liste
09.05.2017 14:06:52
Fennek
Hi,
wenn die Liste im Sheet("Liste") in A2:A.. steht

for i = 2 to sheets("Liste").cells(rows.count, "A").end(xlup).row
'hier die Dateien öffnen
' set WB = workbooks.open(sheets("Liste").cells(i,"A"))
next i

AW: ein eindeutiges Kriterium!
09.05.2017 14:16:17
yummi
Hallo Isabelle,
ungetestet sollte aber so passen:

Sub MWSheetsAusMehrerenDateienEinlesen1()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Dim lletzteZeile As Long
Dim i As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False 'Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ThisWorkbook
'Wichtiger Hinweis: Die Arbeitsblätter dürfen nicht vorhanden sein!
'Alternativer Umbau: Löschen evtl. bereits vorhandener Arbeitsblätter
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "\\emea.fag.com\schweinfurt\DATA\FF-SWE-K\P\Pfister\Test\"   'hier muss  _
der letzte \ meines Erachtens noch hin
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
lletzteZeile = ThisWorkbook.Sheets("Makro").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lletzteZeile
sDatei = ThisWorkbook.Sheets("Makro").Cells(i, 1).Value
If Dir(sPfad & sDatei)  "" Then
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend ö _
ffnen
'Es wird immer das erste Tabellenblatt Sheets(1) kopiert!
oSourceBook.Sheets("VS_Bridge").Copy after:=oTargetBook.Sheets(oTargetBook. _
Sheets. _
Count)
'Es wird versucht den Dateinamen als Arbeitsblattnamen zu setzen.
'Ist dieser bereits vorhanden wird der Fehler abgefangen und das neue Blatt
'bekommt keinen anderen Namen und behält den typischen Namen Tabelle x
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fehler aufgetreten ist, wird dieser resettet
If Err.Number  0 Then
Err.Number = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
'  sDatei = Dir()
Else
MsgBox "Datei " & sDatei & " existiert nicht"
End If
Next i
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Application.DisplayAlerts = True 'Fehlermeldungen wieder anzeigen
'Kleine finale Fertig-Meldung
MsgBox "Fertig!", vbInformation + vbOKOnly, "Hinweis!"
'Variablen aufräumen
Set oTargetBook = Nothing
Set oSourceBook = Nothing
End Sub
wenn der Rest deines Codes vorher schon das richtige geliefert hat.
Gruß
yummi
Anzeige
AW: ein eindeutiges Kriterium!
09.05.2017 14:35:34
Isabell
Perfekte Lösung!!! Klappt wunderbar.
Vielen vielen Dank!
AW: Was ist mit dem VBA-Forum?
09.05.2017 15:04:34
Werner
Hallo Isabelle,
was hältst du davon das im VBA-Forum auch noch mitzuteilen?
Gruß Werner
AW: Was ist mit dem VBA-Forum?
09.05.2017 15:08:14
Isabell
Gute Idee - erledigt!
Noch besser - kein Crossposting o.w.T.
09.05.2017 15:31:13
Werner

157 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige