Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1824to1828
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

Pfad nur bis zur 4. Ebene auslesen

Pfad nur bis zur 4. Ebene auslesen
23.04.2021 20:29:06
Timo
Hallo zusammen,
leider finde ich im Netz nur Infos zu "einen Ordner drüber" oder "einen Ordner drunter" oder ähnliche Themen.
Ich möchte die Pfade eines Laufwerks in eine Mappe einlesen in Spalte A:
C:\Daten\Hallen\...
also,
1. Ebene ist Daten
2. Ebene ist Hallen
... so weit so gut
3. Ebene: Wenn Ordnername der 3. Ebene mit einer Nummer beginnt, dann einlesen aber nur bis zur 4. Ebene, ansonsten diesen Pfad nicht einlesen
4. Ebene (ist immer unterschiedlich, daher brauche ich die Infos aus diesem Ordnernamen aus der 4. Ebene)
Habt ihr eine Idee ob oder wie das funktionieren kann? Das wäre klasse :-)
Ich bedanke mich im voraus und sende viele Grüße
Timo
P.S.: Ich trau mich mal auch noch etwas zu fragen, in der 4. Ebene ist immer eine 7 stellige Nummer als Teil des Ordnernamens vorhanden, aber leider nicht immer an der gleichen Stelle, wenn ich diese Nummer dann noch in die Spalte B einlesen könnte, dann fall ich um :-)

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 22:03:01
Yal
Hallo Timo,
Mit Einbindung der Library "Microsoft Scripting Runtime" und "Microsoft VB-Script Regular expressions 5.5" (In VB-Editor unter Extras, Verweise)

'Mit Einbindung der Library "Microsoft Scripting Runtime"
' und "Microsoft VB-Script Regular expressions 5.5"
'(In VB-Editor unter Extras, Verweise)
Private FSO As FileSystemObject
Private PfadListe()
Sub Starte()
Dim V As Folder
Dim E
'Const cPfad = "C:\Daten\Hallen"
Const cPfad = "C:\temp\H_for"
Set FSO = New FileSystemObject
Set V = FSO.GetFolder(cPfad)
If Not V Is Nothing Then VerzRekurse V
'Ausgabe in Direktfenster (Strg+g oder Ansicht, Direktfenster)
If Ubound0(PfadListe) > -1 Then
For Each E In PfadListe
Debug.Print E
Next
End If
End Sub
Private Function VerzRekurse(Pfad As Folder) As String
Dim V As Folder
Dim Arr
Arr = Split(Pfad.Path, "\")
Select Case UBound(Arr)
Case 2
For Each V In Pfad.SubFolders
VerzRekurse V
Next
Case 3
If IsNumeric(Left(Arr(UBound(Arr)), 1)) Then
For Each V In Pfad.SubFolders
VerzRekurse V
Next
End If
Case 4
If Hat7Zahlen(Arr(UBound(Arr))) Then
ReDim Preserve PfadListe(Ubound0(PfadListe) + 1)
PfadListe(UBound(PfadListe)) = Pfad.Path
End If
End Select
End Function
Public Function Hat7Zahlen(ByVal VerzName As String) As Boolean
Dim R As New RegExp
R.Pattern = "(\d[7])"
Hat7Zahlen = R.Test(VerzName)
End Function
Private Function Ubound0(A) As Long
On Error Resume Next
Ubound0 = -1
Ubound0 = UBound(A)
End Function
und wie immer: versuchen zu verstehen, im I-net nachschlagen, schlau werden.
Viel Erfolg damit. Rückmeldung wäre nett.
VG
Yal
Anzeige
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 22:27:37
Timo
Hallo Yal,
erst einmal vielen Dank für deine Hilfe :-)
Ich habe die beiden Librarys wie beschrieben eingebunden, danke auch für diese Info, und habe das Makro dann gestartet, aber es tut sich leider nichts.
?
Hast du noch eine Idee für mich, danke und viele Grüße
Timo
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 22:27:43
Timo
Hallo Yal,
erst einmal vielen Dank für deine Hilfe :-)
Ich habe die beiden Librarys wie beschrieben eingebunden, danke auch für diese Info, und habe das Makro dann gestartet, aber es tut sich leider nichts.
?
Hast du noch eine Idee für mich, danke und viele Grüße
Timo
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 22:44:27
Yal
Hallo Timo,
wenn Du die Makro nicht durchrasseln lässt, sondern in Schritt-Modus, idealerweise noch mit offenen Lokal_Fenster (Ansicht, Lokal-Fenster), würdest Du schnell sehen, dass

'Const cPfad = "C:\Daten\Hallen"
Const cPfad = "C:\temp\H_for"
nicht passt. Warum?
Weil der Verfasser der Makro nicht deine Datei-Struktur nachgebaut hat und seine eigene verwendet hat. Leider hat er vergessen, die originale wieder einzuschalten:

Const cPfad = "C:\Daten\Hallen"
'Const cPfad = "C:\temp\H_for"
Falls Du das doch schon entdeckt hast (1 Punkt), dann muss Du beachten, dass am Ende

'Ausgabe in Direktfenster (Strg+g oder Ansicht, Direktfenster)
If Ubound0(PfadListe) > -1 Then
For Each E In PfadListe
Debug.Print E
Next
End If
End Sub
Weil zwar hast Du gesagt "einlesen" (Check!), aber nicht was mit das Eingelesenen passieren soll. Ich habe daher die Ausgabe in das Direktfenster (Strg+g) umgeleitet. Es steht (das grüne Schrift, das man Kommentar nennt) im Coding, den ich Dir geraten hatte "zu versuchen zu verstehen".
"VBA bescheiden" ist ein Zustand, aber keine Entschuldigung. Irgendwann möchtest vielleicht selber die nächste Stufe erreichen, oder?
VG
Yal
Anzeige
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 23:01:41
Timo
Hallo Yal,
ja das hatte ich bereits geändert:

Const cPfad = "C:\Daten\Hallen"
'Const cPfad = "C:\temp\H_for"
und hatte dann in Case 4 die Zeilen eingefügt um die Ergebnisse in Spalte A eintragen zu können:

PfadListe(UBound(PfadListe)) = Pfad.Path
Set Rng = ActiveWorkbook.Sheets("Daten").Cells(Rows.Count, 2).End(xlUp).Offset(0, 0)
Rng.Offset(1, 0) = Pfad.Path
End If
Ich habe das auch oben in der bisherigen Ausgabe geändert:

If Ubound0(PfadListe) > -1 Then
For Each E In PfadListe
'Debug.Print E
Set Rng = ActiveWorkbook.Sheets("Daten").Cells(Rows.Count, 1).End(xlUp).Offset(0, 0)
Rng.Offset(1, 0) = E
Next
auch dort listet er leider nur ein paar wenige der vorhandenen Ordner auf.
Vielen Dank für deine Hilfe und viele Grüße
Timo
Anzeige
AW: Pfad nur bis zur 4. Ebene auslesen
23.04.2021 23:12:17
Yal
Hallo Timo,
ich nehme meine Kritik zurück. Es sieht gut aus. "VBA Bescheiden+"
Jetzt muss Du nur noch im Einzelschritt-Modus laufen lassen und der Inhalte der Variablen im Lokal-Fenster beobachten.
Warum nicht alle erwartete Pfad rüberkommen, kann ich leider nicht auswerten. Vielleicht sind es doch weniger Treffer als gedacht.

Set Rng = ActiveWorkbook.Sheets("Daten").Cells(Rows.Count, 1).End(xlUp).Offset(0, 0)
Rng.Offset(1, 0) = E
kannst Du übrigens in

ActiveWorkbook.Sheets("Daten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = E
abkürzen.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige