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

FileSystemObject

FileSystemObject
22.11.2016 11:14:30
Marcel
Hallo,
Set FS = CreateObject("Scripting.FileSystemObject")
Ich weiß, dass ich mit
Set Folder = FS.GetFolder(path)
For Each file In Folder.directories ...
alle DATEIEN eines Ordners durchlaufen kann.
Gibt es eine ähnliche Methode wie GetFolder, die sowohl Dateien, als auch Ordner zurückliefert?
Ich möchte also mit For Each nicht nur die Files, sondern auch Ordner berücksichtigt haben.
Danke!
VG
Marcel

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FileSystemObject
22.11.2016 11:53:12
Rudi
Hallo,
For Each file In Folder.directories
nie und nimmer!!!
Benenne nie Variable wie VBA Schlüsselwörter!!!! Folder und File sind Objektbezeichnungen.
Besser objFolder und objFile.
For Each objFile In objFolder.Files listet die Dateien auf.
Ordner mit
For Each objSubFolder In objFolder.SubFolders
SubFolders können aber wieder SubFolders enthalten. Da kommst du um rekursive Prozeduren kaum drum rum.
Gruß
Rudi
AW: FileSystemObject
22.11.2016 12:13:01
baschti007
Hey Marcel
Dazu gibt es schon was im netz
Hier

Sub ListFiles()
'Declare the variables
Dim objFSO As Scripting.FileSystemObject
Dim objTopFolder As Scripting.Folder
Dim strTopFolderName As String
'Insert the headers for Columns A through F
Range("A1").Value = "Folder"
Range("B1").Value = "File Name"
Range("C1").Value = "File Size"
Range("D1").Value = "File Type"
Range("E1").Value = "Date Created"
Range("F1").Value = "Date Last Accessed"
Range("G1").Value = "Date Last Modified"
'Assign the top folder to a variable
strTopFolderName = "C:\Bastian"
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the top folder
Set objTopFolder = objFSO.GetFolder(strTopFolderName)
'Call the RecursiveFolder routine
Call RecursiveFolder(objTopFolder, True)
'Change the width of the columns to achieve the best fit
Columns.AutoFit
End Sub
Sub RecursiveFolder(objFolder As Scripting.Folder, _
IncludeSubFolders As Boolean)
'Declare the variables
Dim objFile As Scripting.file
Dim objSubFolder As Scripting.Folder
Dim NextRow As Long
'Find the next available row
NextRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
'Loop through each file in the folder
For Each objFile In objFolder.Files
Cells(NextRow, "A").Value = objFolder.Path
Cells(NextRow, "B").Value = objFile.Name
Cells(NextRow, "C").Value = objFile.Size
Cells(NextRow, "D").Value = objFile.Type
Cells(NextRow, "E").Value = objFile.DateCreated
Cells(NextRow, "F").Value = objFile.DateLastAccessed
Cells(NextRow, "G").Value = objFile.DateLastModified
NextRow = NextRow + 1
Next objFile
'Loop through files in the subfolders
If IncludeSubFolders Then
For Each objSubFolder In objFolder.SubFolders
Call RecursiveFolder(objSubFolder, True)
Next objSubFolder
End If
End Sub
Gruß Basti
Anzeige
Wenn schon aus dem Netz, dann ohne Rekursion...
22.11.2016 12:20:55
Michael
Hallo!
Eine wunderschöne Lösung ohne Rekursion von Cor_Blimey auf Stackoverflow:
Public Sub NonRecursiveMethod()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
queue.Add fso.GetFolder("C:\DeinHauptPfad\") 'ersetzen
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1
'Aktionen mit dem Ordner/Vereichnis
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder
Next oSubfolder
For Each oFile In oFolder.Files
'Aktionen mit der/den Datei(en)
Next oFile
Loop
End Sub
Gern geschehen ;-)
Michael
Anzeige
AW: FileSystemObject
22.11.2016 12:40:22
Marcel
Richtig - habe auch die Rekursion schon fertig programmiert, nur in einer anderen Programmiersprache, in der es den Aufruf isDirectory() gibt und True/False zurückliefert.
Schaue mir eure Vorschläge nachher mal an, danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige