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

VBA Ordner per Schleife öffnen

VBA Ordner per Schleife öffnen
17.12.2020 13:07:24
Excel
Hallo zusammen,
ich hatte schon einmal einen Beitrag in diesem Forum gepostet und sehr gute Hilfe bekommen (shoutout an NEpumuk an dieser Stelle).
Hier mal meine alte Anfrage:
"Ich habe einen Ordner auf dem Desktop (Projekt). In diesem befinden sich mehrere Unterordner. Diese besitzen widerum jeweils 2 bis 3 weitere Unterordner, in welchen sich widerum PDF Dateien befinden.
Wie schaffe ich es die PDFs zu auszuschneiden und eine Ebene höher einzufügen, sodass letztendlich nur mein Hauptordner (Projekt) auf dem Desktop, dessen verschiedene Unterordner und direkt in diesen die PDFs über bleiben. Die 2 bis 3 Unterordner sollen gelöscht werden."
Nun hat sich geändert, dass es auch andere Dateien als PDFs in den Ordnern gibt (ist schon im Code angepasst). Leider habe ich gibt es ein Problem für den Fall, falls ein Untereinordner im Projektordner keine der 3 Unterordner besitzt bzw. die Dateien direkt in den Projektordner geladen werden und der Unterordner, der eigentlich erhalten werden soll gelöscht werden soll. Macht man das indem man eine Schleife vor der if-Schleife einfügt, in der die strFilename ausgelesen wird? Also dass er vergleicht ob er wenn er eine Ebene höher geht noch im Unterordner ist oder sich schon im Hauptordner befindet und folglich die nächste Iteration durchführt
Vielen Dank für Eure Hilfe. Hier mal der Code. Was müsste ich noch anpassen?
Option Explicit
Public Sub Beispiel()
Dim strFolder As String, astrFolders() As String
Dim astrFolder() As String, strParentFolder As String
Dim strFilename As String
Dim ialngFolders As Long
strFolder = Environ$("USERPROFILE") & "\Desktop\Projekt\"
astrFolders = GetFolders(strFolder)
For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
astrFolder = Split(astrFolders(ialngFolders), "\")
Redim Preserve astrFolder(UBound(astrFolder) - 2)
strParentFolder = Join(astrFolder, "\") & "\"
strFilename = Dir$(astrFolders(ialngFolders) & "*.*")
If strFilename  vbNullString Then
Do Until strFilename = vbNullString
Name astrFolders(ialngFolders) & strFilename As strParentFolder & strFilename
strFilename = Dir$
Loop
Call RmDir(Path:=astrFolders(ialngFolders))
End If
Next
End Sub

Private Function GetFolders(ByVal pvstrPath As String) As String()
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
Redim Preserve astrFolders(ialngIndex1)
astrFolders(ialngIndex1) = pvstrPath
ialngIndex1 = 1
ialngIndex2 = 1
strPath = pvstrPath
Do
strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
Do Until strFolder = vbNullString
If strFolder  "." And strFolder  ".." Then
If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
Redim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
If ialngIndex1 = ialngIndex2 Then Exit Do
strPath = astrFolders(ialngIndex2)
ialngIndex2 = ialngIndex2 + 1
Loop
GetFolders = astrFolders
End Function

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Ordner per Schleife öffnen
18.12.2020 13:35:31
Yal
Hallo Noob,
beachte bitte deine Komma-Setzung. Es würde die Lesbarkeit positiv beeinflüssen. Spätestens an der Stelle sind viele potentielle Helfer ausgestiegen.
Ich habe keine fertige Lösung, aber ein Hilfsmittel: wenn ich nicht weiß, welche Coding-Element zu verwenden ist, mache ich mir den Durchlauf in einer Code-unabhängigen Beschreibung:
Für alle Unterverzeichnis V im Verz_x
Wenn V ein Projektordner ist
Dann
Aktion 1
Aktion 2
Sonst
Aktion 3
Ende Wenn
Nächste V
Achte, dass die Abzweige-Frage eindeutig sind: Wie kann ich eindeutig sagen, dass ein Verzeichnis ein Projektordner ist oder nicht?
Die Aktionen sollten zuerst grob bleiben. Verfeinert werden Sie erst in ein zweiten Durchlauf. Aus Aktion 1 wir ein "Wenn..Dann..Sonst..Ende Wenn" oder ein "Für alle..Nächste" oder ein "Solang..Revaluiere" ...
Wenn Du am Coding klebst, und ganz viele rote Zeile bekommst, kommt Dir die Logik ab, und man verzettelt sich standig und kommt nicht voran.
Dass Du deine Vorhaben nicht klar beschreiben kannst, ist ein Symptome dafür.
Vermeide ebenfalls eine Frage über eine mögliche Lösungsweg innerhalb der Problemstellung. Es verwirrt nur.
Viel Erfolg
Yal
Anzeige

245 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige