10.12.2018, 20:13
(Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2018, 20:47 von WillWissen.
Bearbeitungsgrund: Codetags
)

Hallo zusammen,
ich will aus verschiedenen Netzlaufwerken die Verzeichnisstruktur und Dateinamen auslesen und mit Datum/Größe in einem Sheet ausgeben.
Das reine Auslesen von Pfad und Dateien ließe sich mit diesem Code erledigen:
---
Code:
Option Explicit
Option Compare Text
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_readfolder.php
' ************************************************************************************************
Const sRootPath As String = "C:\Test" 'Pfad bitte anpassen ohne Trennzeichen am Ende!!!
Private lRowCounter As Long
Private oSheet As Object
'Start der Routine: Call MWDateienMitUnterordnernAuslesen
Public Sub MWDateienMitUnterordnernAuslesen()
Set oSheet = Sheets.Add
oSheet.Activate
oSheet.Cells(1, 1).Select
Call CreateHeadLinesAndFormat
lRowCounter = 2
Call MWReadSubFolder(sRootPath)
Set oSheet = Nothing
End Sub
Private Sub CreateHeadLinesAndFormat()
Dim i As Long
oSheet.Cells(1, 1) = "Pfad"
oSheet.Cells(1, 2) = "Dateiname"
oSheet.Columns(1).ColumnWidth = 40
oSheet.Columns(2).ColumnWidth = 40
For i = 1 To 2
With oSheet
.Cells(1, i).Interior.ColorIndex = 11
.Cells(1, i).Font.Color = vbWhite
.Cells(1, i).Font.Bold = True
End With
Next i
End Sub
Private Sub MWReadSubFolder(ByVal sPath As String)
Dim oFSO As Object
Dim oFolder As Object
Dim oSubFolder As Object
Dim oFile As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.getfolder(sPath)
With oSheet
For Each oSubFolder In oFolder.subfolders
'Alle Dateien auflisten
For Each oFile In oSubFolder.Files
.Cells(lRowCounter, 1) = oSubFolder.Path
.Cells(lRowCounter, 2) = oFile.Name
lRowCounter = lRowCounter + 1
Next oFile
'Alle Unterverzeichnisse verarbeiten (rekursiv)
Call MWReadSubFolder(oSubFolder.Path)
Next oSubFolder
End With
Set oFSO = Nothing
Set oFile = Nothing
Set oFolder = Nothing
Set oSubFolder = Nothing
End Sub
---
Mein Problem ist, dass ich verschiedene Netzlaufwerke habe, aus denen die Dateien und eine definierte Tiefe der Verzeichnisstruktur, zusammen in einer Ausgabespalte A alphabetisch sortiert werden sollen.
Was ist der bessere Weg?
Ein Laufwerk nach dem Anderen auslesen oder kann man die abzuarbeitenden Netzlaufwerke, aus denen die Dateien und Verzeichnisse gelesen werden sollen, auch gleich am Anfang des Makros definieren?
Und wie kann ich im Makro für jedes Netzlaufwerk fix definieren, welcher Teil des Pfades ausgelesen werden soll?
Aus Performancegründen soll bei Erreichen der notwendigen Tiefe der weitere Pfad nicht weiter ausgelesen werden.
Also etwa so: "Nimm Verzeichnistiefe 7-8 von Server1 und fülle solange Zeilen mit Verzeichnisnamen, solange in Verzeichnistiefe 8 unterschiedliche Verzeichnisnamen stehen."
Ich hoffe die Beispiel-Datei macht klar, wohin ich will und dass mir jemand helfen kann.