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

Listen aus vielen Unterverzeichnissen zusammenführ

Listen aus vielen Unterverzeichnissen zusammenführ
03.06.2016 12:00:18
Lena
Hallo zusammen,
Ich habe ein Makro, welches sämtliche Dateien in einem Verzeichnis in einer Datei zusammenführt. Das funktioniert auch so weit. Das Problem ist nun, dass sich nicht alle Dateien im gleichen Verzeichnis sondern sich in vielen verschiedenen Unterverzeichnissen befinden (z.B. R:\Products\Portfolio 2016\Products per Store\1, R:\Products\Portfolio 2016\Products per Store\2, R:\Products\Portfolio 2016\Products per Store\3). Meine VBA-Kenntnisse sind aber nicht so gut, dass ich das Makro entsprechend anpassen könnte. Könnt ihr mir da weiterhelfen?
Hier mein Makro:

Sub Zusammenfassen_FS()
Dim FileArray() As Variant
Dim FileName As Variant
Dim FileCount As Integer
FileCount = 0
FileName = Dir("R:\Products\Portfolio 2016\Products per Store\*FS*_PortfolioManagement.xlsm" _
_
)
If FileName = "" Then GoTo NoFilesFound
ActiveWorkbook.Windows(1).Caption = "Overview"
Do While FileCount  1 Then
Range("A65536").End(xlUp).Offset(1, 0).Select
Else
Range("A2").Select
End If
ActiveSheet.Paste
Application.CutCopyMode = False
'ActiveWorkbook.Close savechanges:=False
Windows("ABC").Close savechanges:=False
FileList = FileArray
FileName = Dir()
Loop
' Datei mit dem aktuellen Datum im Dateinamen abspeichern
ActiveWorkbook.SaveAs FileName:= _
"R:\Products\Portfolio 2016\Products per Store\" & "Summary_FS_" & Format(Date$, "YYYY-  _
_
MM-DD") & ".xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Range("A1").Select
NoFilesFound:
FileList = False
End Sub

Danke schon im Voraus!
Liebe Grüsse
Lena

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listen aus vielen Unterverzeichnissen zusammenführ
03.06.2016 15:17:55
Fennek
Hallo Lena,
auch wenn es viele Möglichkeiten gibt, ich würde dir raten zuerst ein Array mit den Pfaden anzulegen:

sPath = array("c:\temp\", "c:\user\wer_auch_immer\", "z:\nas\user", "usw")
Danach in allen Zeilen die es betrifft, Pfad- und Dateinamen trennen, z.B.

sFile = "meine_Datei.xlsx"
sPfad = sPath(2)
set wbQuelle = workbooks.open(sPfad & sFile)
Wenn das gemacht ist, bedarf es noch einer Schleife über alle Pfade des Arrays.
mfg

Gibt es eine einfachere Lösung?
03.06.2016 15:31:06
Lena
Hallo Fennek
Danke vielmals für deine Hilfe.
Das Problem ist, dass die Excel-Listen in über 130 Unterverzeichnissen abgelegt sind und ich genau deshalb eine andere Lösung suche, als alle einzeln aufzulisten. Der Anfang des Pfades ist jeweils R:\Products\Portfolio 2016\Products per Store\. Gibt es da nicht eine einfachere Lösung?
Liebe Grüsse
Lena

Anzeige
AW: Gibt es eine einfachere Lösung?
03.06.2016 17:36:09
Michael
Hi Lena,
anbei eine Funktion, die mittels Shell alle Dateinamen in ein Array steckt, das man dann durchlaufen kann.
Es folgen zwei Subs zur Illustration der Verwendung...
Function DateinImPfad(pfad$, Optional modus As Long = 0) As Variant
Dim aFile As Variant, sFile$, uba&, aAus() As Variant, i&
If Dir(pfad) = "" Or Not (modus = 0 Or modus = 1) Then
DateinImPfad = "Pfad ist leer oder Modus nicht 0 oder 1"
Exit Function
End If
sFile = CreateObject("wscript.shell").exec("cmd /c Dir " & _
Chr(34) & pfad & Chr(34) & " /b /s").stdout.readall
' chr(34)=", in "" wegen möglicher Leerzeichen im Pfad/Dateinamen
aFile = Filter(Split(sFile, vbCrLf), ".")
' d.h. die Meldung "Datei nicht gefunden" fliegt raus, weil ohne "."
uba = UBound(aFile)                ' -1, falls leer
If uba 

...und die Datei mit einer entsprechend angepaßten Variante Deiner vorhandenen Sub:
https://www.herber.de/bbs/user/105972.xlsm
Schöne Grüße,
Michael
P.S.: Das Ganze geht ohne eine weitere Änderung übrigens nur mit "englischen" Dateinamen ohne dt. Umlaute und ß und so Zeug.

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
03.06.2016 16:21:19
Daniel
Hi
probier mal diesen Code:
die Schleife läuft auch mit DIR über die Dateien im Verzeichnis, aber sie erkennt auch die Unterverzeichnisse und erweitetert dann das Array mit den zu durchsuchenden Verzeichnissen automatisch, so dass du nur das Startverzeichnis eingeben musst.
den Code zum Bearbeiten der Datei musst du an der gekennzeichneten Stelle einfügen:
Sub DateienÖffnen()
Dim Ordner
Dim Datei As String
Dim od As Long
Dim wb As Workbook
ReDim Ordner(0) As String
'--- Startverzeichnis festlegen
Ordner(0) = "R:\Products\Portfolio 2016\Products per Store\"
od = 0
Do While od  ""
If Left(Datei, 1)  "." Then '--- Standard-Ordner "." und ".." ignorieren
If (GetAttr(Ordner(od) & Datei) And vbDirectory) = vbDirectory Then
ReDim Preserve Ordner(UBound(Ordner) + 1)
Ordner(UBound(Ordner)) = Ordner(od) & Datei & "\"
ElseIf Datei Like "*FS*_PortfolioManagement.xlsm" Then
Set wb = Workbooks.Open(Ordner(od) & Datei)
'... hier der Code zum Übertragen der Daten
wb.Close False
End If
End If
Datei = Dir
Loop
od = od + 1
Loop
End Sub
Gruß Daniel

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
03.06.2016 18:17:31
Lena
Hi Daniel
Danke vielmals für deinen Vorschlag. Der ist super und funktioniert fast perfekt ;-).
Wahrscheinlich braucht es nur noch eine kleine Änderung, aber ich sehe es nicht mehr... Das Problem ist nun noch, dass es alle Daten in die Liste einfügt, die als Erstes geöffnet wird. Eigentlich sollten die Daten aber in das Workbook eingefügt werden, wo das Makro ausgeführt ist.
Zum Verständnis: Die Datei, in der das Makro ausgeführt wird, sollte "Overview" benannt und die Dateien aus den Unterverzeichnissen jeweils "ABC".
Hier das vollständige Makro:

Sub DateienZusammenführen()
Dim Ordner
Dim Datei As String
Dim od As Long
Dim wb As Workbook
ReDim Ordner(0) As String
'--- Startverzeichnis festlegen
Ordner(0) = "R:\Products\Portfolio 2016\Products per Store\"
od = 0
Do While od  ""
If Left(Datei, 1)  "." Then '--- Standard-Ordner "." und ".." ignorieren
If (GetAttr(Ordner(od) & Datei) And vbDirectory) = vbDirectory Then
ReDim Preserve Ordner(UBound(Ordner) + 1)
Ordner(UBound(Ordner)) = Ordner(od) & Datei & "\"
ElseIf Datei Like "*FS*_PortfolioManagement.xlsm" Then
Set wb = Workbooks.Open(Ordner(od) & Datei)
'Code zum Übertragen der Daten
Dim FileArray() As Variant
Dim FileName As Variant
Dim FileCount As Integer
FileCount = 0
FileName = Dir("R:\Products\Portfolio 2016\Products per Store\")
If FileName = "" Then GoTo NoFilesFound
ActiveWorkbook.Windows(1).Caption = "Overview"
Do While FileCount  1 Then
Range("A65536").End(xlUp).Offset(1, 0).Select
Else
Range("A2").Select
End If
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("ABC").Close savechanges:=False
FileList = FileArray
FileName = Dir()
Loop
' Datei mit dem aktuellen Datum im Dateinamen abspeichern
ActiveWorkbook.SaveAs FileName:= _
"R:\Products\Portfolio 2016\Products per Store\" & "Summary_FS_" & Format(Date$, " _
YYYY-MM-DD") & ".xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Range("A1").Select
NoFilesFound:
FileList = False
wb.Close False
End If
End If
Datei = Dir
Loop
od = od + 1
Loop
End Sub
Liebe Grüsse
Elena

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
03.06.2016 18:34:08
Daniel
Hi
nach dem Öffnen einer Datei (Workbooks.Open) ist immer die neu geöffnete Datei die aktive.
dh die neu geöffnete Datei kannst du immer über ActiveWorkbook ansprechen.
die Datei mit dem Makro kannst du immer mit ThisWorkbook ansprechen.
das mit dem Select und Activate solltest du dir abgewöhnen und die Zellen immer vollständig referenzieren.
also im Prinzip etwa so, um die Daten von der genöffneten Datei in die Datei mit dem Makro zu kopieren:
Workbooks.Open "neue Datei"
ActiveWorkbook.Worksheets(1).Usedrange.Copy
ThisWorkbook.Worksheets(1).Cells(Rows.count, 1).End(xlup).Offset(1, 0).PasteSpecial xlpasteall

hierzu auch mal das lesen
http://www.online-excel.de/excel/singsel_vba.php?f=78
Gruß Daniel

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
06.06.2016 13:23:11
Lena
Hallo Daniel
Danke vielmals für deine Hilfe. Ich habe den Code, wie du ihn vorgeschlagen hast, eingefügt. Zudem musste ich noch den Pfad anpassen, da die Dateien nun doch auf einer SharePoint Webseite abgelegt werden. Nun wird aber nur noch das erste File geöffnet. Anschliessend passiert nichts mehr (es wird nichts kopiert und es erscheint auch keine Fehlermeldung). Habe ich etwas falsch gemacht? Hier der aktuelle Stand meines Makros:
Sub DateienÖffnen()
Dim Ordner
Dim Datei As String
Dim od As Long
Dim wb As Workbook
ReDim Ordner(0) As String
'--- Startverzeichnis festlegen
Ordner(0) = "\\example.com\projects\PortfolioManagementProcess\2016\Products_per_Store\ _
Attachments\"
od = 0
Do While od  ""
If Left(Datei, 1)  "." Then '--- Standard-Ordner "." und ".." ignorieren
If (GetAttr(Ordner(od) & Datei) And vbDirectory) = vbDirectory Then
ReDim Preserve Ordner(UBound(Ordner) + 1)
Ordner(UBound(Ordner)) = Ordner(od) & Datei & "\"
ElseIf Datei Like "*FS*_PortfolioManagement.xlsm" Then
Set wb = Workbooks.Open(Ordner(od) & Datei)
'Code zum Übertragen der Daten
Dim FileArray() As Variant
Dim FileName As Variant
Dim FileCount As Integer
FileCount = 0
FileName = Dir("\\example.com\projects\PortfolioManagementProcess\2016\ _
Products_per_Store\Attachments\")
If FileName = "" Then GoTo NoFilesFound
ActiveWorkbook.Windows(1).Caption = "Overview"
Do While FileCount 

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
06.06.2016 13:23:30
Lena
Hallo Daniel
Danke vielmals für deine Hilfe. Ich habe den Code, wie du ihn vorgeschlagen hast, eingefügt. Zudem musste ich noch den Pfad anpassen, da die Dateien nun doch auf einer SharePoint Webseite abgelegt werden. Nun wird aber nur noch das erste File geöffnet. Anschliessend passiert nichts mehr (es wird nichts kopiert und es erscheint auch keine Fehlermeldung). Habe ich etwas falsch gemacht? Hier der aktuelle Stand meines Makros:
Sub DateienÖffnen()
Dim Ordner
Dim Datei As String
Dim od As Long
Dim wb As Workbook
ReDim Ordner(0) As String
'--- Startverzeichnis festlegen
Ordner(0) = "\\example.com\projects\PortfolioManagementProcess\2016\Products_per_Store\ _
Attachments\"
od = 0
Do While od  ""
If Left(Datei, 1)  "." Then '--- Standard-Ordner "." und ".." ignorieren
If (GetAttr(Ordner(od) & Datei) And vbDirectory) = vbDirectory Then
ReDim Preserve Ordner(UBound(Ordner) + 1)
Ordner(UBound(Ordner)) = Ordner(od) & Datei & "\"
ElseIf Datei Like "*FS*_PortfolioManagement.xlsm" Then
Set wb = Workbooks.Open(Ordner(od) & Datei)
'Code zum Übertragen der Daten
Dim FileArray() As Variant
Dim FileName As Variant
Dim FileCount As Integer
FileCount = 0
FileName = Dir("\\example.com\projects\PortfolioManagementProcess\2016\ _
Products_per_Store\Attachments\")
If FileName = "" Then GoTo NoFilesFound
ActiveWorkbook.Windows(1).Caption = "Overview"
Do While FileCount 

Anzeige
AW: Dateien öffnen und Unterverzeichnisse erkennen
06.06.2016 22:45:57
Daniel
Hi
du darfst immmer nur eine DIR(next) Schleife aufmachen.
hier schachtelt du aber zwei DIR-Schleifen ineinander.
das funktioniert nicht.
warum du jetzt zum Übertragen der Dateien nochmal das DIR- aufrufst verstehe ich nicht.
Dabei verliert das erste Dir seinen Bezug und funktioniert nicht mehr.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige