Guten Abend.
in 2 Schritten, also mit separaten "Programmen" möchte ich zunnächst für ein auszuwählendes Verzeichnis alle Unterordner und alle Dateien (Name, letztes Speichern, evtl Fullname) in eine Excel-Liste schreiben lassen. Dann soll in der Liste "manuell" durch Eintrag eins "X" in der Folgespalte markiert werden, dass die Datei zu löschen ist. In Excel würde ich einen Hyperlink zur Datei organisieren, damit diese bei Bedarf schnell geöffnet werden kann.
Das zweite "Programm" soll die markierten Dateien löschen und alle Ordner, die nach dem Löschen leer sind, sollen ebenfalls verschwinden.
Meine Datei heißt 20210104_cp_dateiscan.xlsm. in Zelle B4 der Tabelles "Startseite" hat der user die Möglichkeit, bis zu 4 Ebenen der Speicherhierarchie auszuwählen, wobei die erstenn beiden vorgegeben werden. Das Ergebnis soll auf dem Blatt "Verzeichnis" ab E3 ausgegeben werden. Jede neue Ebene, bzw. jede Sub-Ebene soll eine Spalte weiter nach rechts gerückt werden, um die "Baumstruktur" deutlich zu machen. Der gesamte Inhhalt eines Ordners, also sowohl Dateien als auch Verzeichnisse, können in der gleichen Spalte gezeigt werden. Alternativ ginge auch Ordner in Baumstruktur und alle Dateien in der Spalte nach der Spalte für die unterste Ordner-Ebene. Ist es schlauer, auch den Pfad der Datei, also den Fullname ausweisen zu lassen, oder verkompliziert das die Sache eher? Wenn dann wäre es günstig, stünden alle Fullnames in einer Spalte rechts der Struktur.
Spalte A habe ich für das Markieren/Auswählen vorgesehen, Spalte B für die Hyperlinks, Spalte C für das Datum der letzten Nutzung und D als leere Spalte.
also etwa so:
A B C D E - ? ....... oder alternativ A - D | E - ? | ? + 1 | ? + 2
löschen? (X) Link zur Datum Verzeichnisse Fiullname unverändert Ordner Dateien Fullname
Datei letzes Speichern und Dateien
Aus einem Buch habe ich mir für den ersten Teil bereits Hilfe gesucht, aber leider funktioniert das nicht, und ich weiß nicht, woran es liegt.
Für den zweiten Teil bin ich noch völlig blank.
Sub Liste_aller_Dateien()
Dim lngzeile As Long
Dim lngspalte As Long
Dim strPFad As String
'Vom user vorgegebenen Pfad "merken"
Worksheets("startseite").Activate
ActiveSheet.Range("b4").Copy
Worksheets("Verzeichnis").Activate
ActiveSheet.Range("A1").PasteSpecial xlPasteValues
strPFad = ActiveSheet.Range("a1").Value
lngzeile = 2
Call OrdnerAuslesen(strPFad, lngzeile, lngspalte)
End Sub
Sub OrdnerAuslesen(strPFad As String, ByRef lngzeile, ByRef lngspalte)
Dim oFSO As Object
Dim objOrdner As Object
Dim objUnterordner As Object
Dim objDatei As Object
Dim Verzeichnis As Worksheet
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set objOrdner = oFSO.getfolder(strPFad)
lngspalte = lngspalte + 1
For Each objDatei In objOrdner.Files
lngzeile = lngzeile + 1
Verzeichnis.Cells(lngzeile, lngspalte).Value = objDatei.Name
Verzeichnis.Cells(lngzeile, lngspalte).Font.Bold = True
Next objDatei
For Each objUnterordner In objOrdner.Subfolders
lngzeile = lngzeile + 1
Verzeichnis.Cells(lngzeile, lngspalte).Value = objUnterordner.Name & "\"
Verzeichnis.Cells(lngzeile, lngspalte).Font.Bold = False
Call OrdnerAuslesen(objUnterordner.Path, lngzeile, lngspalte)
Next objUnterordner
lngspalte = lngspalte - 1
Set oFSO = Nothing
Exit Sub
Fehler:
If Err.Number = 70 Then
lngzeile = lngzeile + 1
Verzeichnis.Cells(lngzeile, lngspalte).Value = "Zugriff verweigert"
End If
lngspalte = lngspalte - 1
Set oFSO = Nothing
End Sub
Ich hoffe sehr, ich habe alles verständlich dargestellt und dadurch meinen Helfern, möglichst wenig Aufwand bereitet.
Es wäre toll, könnte jemand helfen. Super wäre auch ein Hinweis, warum mein Code nicht läuft.
Vielen, vielen Dank im Voraus
Steffi
|