Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
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 Makro z. auslesen v. Verzeichnissen und Date

Excel Makro z. auslesen v. Verzeichnissen und Date
20.01.2017 09:46:43
S.
Hallo,
ich möchte von einem Verzeichnis x die Unterordner/Verzeichnisse inkl. Dateien in Spalten darstellen.
Das darstellen der Verzeichnisstruktur klappt auch bereits hiermit:
Public Sub OrdnerListen_Start()
Dim fso As Object
Dim strPfad As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Start-Verzeichnis wählen"
.ButtonName = "übernehmen"
If .Show -1 Then Exit Sub
strPfad = .SelectedItems(1)
End With
With ActiveSheet
.UsedRange.ClearContents
Set fso = CreateObject("Scripting.FileSystemObject")
Call OrdnerListen(fso, strPfad, .Range("A1")) 'Beginn ist in Zelle A1!
Set fso = Nothing
End With
End Sub
Private Sub OrdnerListen(fso As Object, Ordnerangabe As String, rng As Range, Optional Zeile As Long, Optional Spalte As Long)
Dim o, uo
Set o = fso.GetFolder(Ordnerangabe)
rng.Offset(Zeile, Spalte).Value = o.Name
Zeile = Zeile + 1
For Each uo In o.SubFolders
Spalte = Spalte + 1
Call OrdnerListen(fso, uo.Path, rng, Zeile, Spalte)
Spalte = Spalte - 1
Next
Set o = Nothing
Set uo = Nothing
End Sub
Nun möchte ich in die nächste freie Spalte, den Dateinamen jeder Datei im Ordner/Verzeichnis ausgeben, sodass die Anzeige schließlich wie folgt wäre:
Beispiel:
Spalte A       Spalte B         Spalte C         Spalte, die als nächstes frei ist
Proj-----|
|-----SUB Ordner 1--------------------- Datei.txt
|                |--------------------- Datei.pdf
|-----SUB Ordner 2
|                |---- Verzeichnis x
|                |                  |-- Datei.dwg
|                |----------------------Datei2.pdf
|                |--------------------- Datei.jpg
Wie bekomme ich nun die Dateien jedes Ordners/Verzeichnisses in der nächsten freien Spalte eingefügt?
Danke im Voraus!
Steffen

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Probiere es mal...
20.01.2017 10:54:12
Case
Hallo, :-)
... so: ;-)
Option Explicit
Dim lngColumn As Long
Dim objFSO As Object
Dim objFOL As Object
Dim objFIL As Object
Dim objFO As Object
Dim objFU As Object
Dim lngRow As Long
Public Sub Ordner_Dateien_Auflisten()
Dim objShell As Object
Dim varDir As Variant
Dim strTMP As String
Set objShell = CreateObject("Shell.Application")
Set varDir = objShell.BrowseForFolder _
(0, "Folder", &H4000, 17)
Application.ScreenUpdating = False
On Error Resume Next
strTMP = varDir.Self.Path
On Error GoTo 0
On Error GoTo Fin
If strTMP  "" And Left(strTMP, 2)  "::" Then
If Right(strTMP, 1)  "\" Then strTMP = strTMP & "\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Tabelle1.Cells.Clear ' eventuell anpassen
lngRow = 0
lngColumn = 0
GetSubFolders_Files strTMP
Tabelle1.Columns.AutoFit
End If
Fin:
Application.ScreenUpdating = True
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & " " & Err.Description
Set objShell = Nothing
Set varDir = Nothing
End Sub
Private Function GetSubFolders_Files(ByVal strPath As String) As String
Set objFO = objFSO.GetFolder(strPath)
Set objFU = objFO.SubFolders
With Tabelle1 ' eventuell anpassen
lngRow = lngRow + 1
lngColumn = lngColumn + 1
.Cells(lngRow, lngColumn).NumberFormat = "@"
.Cells(lngRow, lngColumn) = objFO.Name
.Cells(lngRow, lngColumn).AddComment objFO.Path
.Cells(lngRow, lngColumn).Comment.Shape.TextFrame.AutoSize = True
.Hyperlinks.Add _
Anchor:=.Cells(lngRow, lngColumn), _
Address:=strPath, _
TextToDisplay:=.Cells(lngRow, lngColumn).Value
.Cells(lngRow, lngColumn).Font.Bold = True
.Cells(lngRow, lngColumn).Font.ColorIndex = 3
For Each objFIL In objFO.Files
lngRow = lngRow + 1
.Cells(lngRow, lngColumn + 1) = objFIL.Name
.Cells(lngRow, lngColumn + 1).AddComment _
"Pfad: " & objFIL.Path & vbCrLf & _
"Dateityp: " & objFIL.Type & vbCrLf & _
"Groesse in KB: " & objFIL.Size / 1024 & vbCrLf & _
"Erstelldatum: " & objFIL.DateCreated & vbCrLf & _
"Letzter Zugriff: " & objFIL.DateLastAccessed & vbCrLf & _
"Aenderungsdatum: " & objFIL.DateLastModified
.Cells(lngRow, lngColumn + 1).Comment.Shape.TextFrame.AutoSize = True
.Hyperlinks.Add _
Anchor:=.Cells(lngRow, lngColumn + 1), _
Address:=objFIL.Path, _
TextToDisplay:=.Cells(lngRow, lngColumn + 1).Value
Next objFIL
End With
For Each objFOL In objFU
GetSubFolders_Files objFOL.Path
Next objFOL
lngColumn = lngColumn - 1
End Function
Servus
Case

Anzeige
AW: Probiere es mal...
20.01.2017 11:15:25
S.
Hallo,
funktioniert soweit ganz gut, jedoch werden die Dateinamen nicht in der letzten Spalte (rechts neben dem letzten Subfolder/Verzeichnis angezeigt und es werden die Systemdateien wie Thumbs.db, desktop.ini,... angezeigt...
Bisher schonmal ein dickes Dake sehr!!!
Dann probiere mal...
20.01.2017 12:03:52
Case
Hallo, :-)
... das: ;-)
Option Explicit
Dim lngColumn As Integer
Dim objFSO As Object
Dim objFOL As Object
Dim objFIL As Object
Dim objFO As Object
Dim objFU As Object
Dim lngRow As Long
Public Sub Ordner_Dateien_Auflisten()
Dim objShell As Object
Dim varDir As Variant
Dim strTMP As String
Set objShell = CreateObject("Shell.Application")
Set varDir = objShell.BrowseForFolder _
(0, "Folder", &H4000, 17)
Application.ScreenUpdating = False
On Error Resume Next
strTMP = varDir.Self.Path
On Error GoTo 0
On Error GoTo Fin
If strTMP  "" And Left(strTMP, 2)  "::" Then
If Right(strTMP, 1)  "\" Then strTMP = strTMP & "\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Tabelle1.Cells.Clear ' eventuell anpassen
lngRow = 0
lngColumn = 0
GetSubFolders_Files strTMP
Tabelle1.Columns.AutoFit
End If
Fin:
Application.ScreenUpdating = True
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & " " & Err.Description
Set objShell = Nothing
Set varDir = Nothing
End Sub
Private Function GetSubFolders_Files(ByVal strPath As String) As String
Set objFO = objFSO.GetFolder(strPath)
Set objFU = objFO.SubFolders
With Tabelle1 ' eventuell anpassen
lngRow = lngRow + 1
lngColumn = lngColumn + 1
.Cells(lngRow, lngColumn).NumberFormat = "@"
.Cells(lngRow, lngColumn) = objFO.Name
.Cells(lngRow, lngColumn).AddComment objFO.Path
.Cells(lngRow, lngColumn).Comment.Shape.TextFrame.AutoSize = True
.Hyperlinks.Add _
Anchor:=.Cells(lngRow, lngColumn), _
Address:=strPath, _
TextToDisplay:=.Cells(lngRow, lngColumn).Value
.Cells(lngRow, lngColumn).Font.Bold = True
.Cells(lngRow, lngColumn).Font.ColorIndex = 3
For Each objFIL In objFO.Files
Debug.Print objFIL.Type
.Cells(lngRow, lngColumn + 1) = objFIL.Name
.Cells(lngRow, lngColumn + 1).AddComment _
"Pfad: " & objFIL.Path & vbCrLf & _
"Dateityp: " & objFIL.Type & vbCrLf & _
"Groesse in KB: " & objFIL.Size / 1024 & vbCrLf & _
"Erstelldatum: " & objFIL.DateCreated & vbCrLf & _
"Letzter Zugriff: " & objFIL.DateLastAccessed & vbCrLf & _
"Aenderungsdatum: " & objFIL.DateLastModified
.Cells(lngRow, lngColumn + 1).Comment.Shape.TextFrame.AutoSize = True
.Hyperlinks.Add _
Anchor:=.Cells(lngRow, lngColumn + 1), _
Address:=objFIL.Path, _
TextToDisplay:=.Cells(lngRow, lngColumn + 1).Value
lngRow = lngRow + 1
Next objFIL
End With
For Each objFOL In objFU
GetSubFolders_Files objFOL.Path
Next objFOL
lngColumn = lngColumn - 1
End Function
Da ist jetzt auch ein Debug.Print drin. Das gibt die den Typ der Datei im VBA-Editor im Direktfenster aus. Prüfe mal welchen Typ die Dateien haben, die du nicht haben willst und nimm die mit eine kleinen If-Prüfung raus.
Servus
Case

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige