Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ordner suchen in Verzeichnis Pfad ausgab

Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 16:02:38
Andreas
Hallo,
ich habe noch eine Frage bezüglich dem Durchsuchen von Ordnern. Überall finde ich, wie man Dateien in Ordnern suchen kann.
Ich würde aber gerne per VBA ein Verzeichnis (Z:\Test) durchsuchen, das mir einen speziellen Ordner finden soll. Dazu soll er alle Unterordner durchsuchen, bis er den Ordner gefunden hat. Es gibt nur einen Ordner, der gefunden werden kann. Und dieser ORdner hat auch einen definierten Namen (zb Log).
Kann mir jemand helfen, wie man das per VBA so hinbekommt, dass mir hinterher als msgbox der Pfad angezeigt wird, in dem sich der LOG befindet?
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 16:28:53
Yal
Hallo Andreas,
wenn es nciht unbedingt mit VBA gemacht werden soll, dann so:
_ DOS-Fenster öffnen (Win+r, "cmd")
_ auf dem Start-Verzeichnis navigieren ( cd Verzeichnisname)
_ Befehl anstossen: dir /s /ad |find "log"
Mit VBA müsste man rekursiv eingehen:

Option Explicit
'unter Anbindung vom Microsoft Scripting Runtime
' ("Extras", "Verweise...", "Microsoft Scripting Runtime" anhacken)
Private FSO As FileSystemObject
Sub Verzeichnis_suchen()
Dim Ergebnis As String
Const StartVerzeichnis = "Z:\Test"
Ergebnis = Verzeichnis_auflisten(StartVerzeichnis)
Debug.Print Ergebnis
MsgBox Ergebnis, vbOKOnly, "Ergebnis"
End Sub
Function Verzeichnis_auflisten(Pfad As String, Optional VerzName As String = "Log") As String
Dim BasisVerz As Folder
Dim SubVerz As Folder
Dim Ergebnis As String
'Verzeichnis holen, wenn nicht vorhanden, rausspringen
Set BasisVerz = FSO.GetFolder(Path)
If BasisVerz Is Nothing Then Exit Function
'Unterverzeichnis durchgehen (Rekursiv)
For Each SubVerz In BasisVerz.SubFolders
Ergebnis = Verzeichnis_auflisten(SubVerz.Path)
If InStr(1, VerzName, Ergebnis, vbTextCompare) Then
Verzeichnis_auflisten = Ergebnis
Exit Function
End If
Next SubVerz
End Function
VG
Yal
Anzeige
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 16:55:58
Andreas
Kommt leider ein Fehler bei Pfad.... Das ganze in ein Modul verschoben?
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 17:00:57
UweD
Hallo
hast du auch die Verweise im VBA Editor angeklickt?

'unter Anbindung vom Microsoft Scripting Runtime
' ("Extras", "Verweise...", "Microsoft Scripting Runtime" anhacken)
LG UweD
Anzeige
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 17:01:56
Andreas
ja habe ich gemacht. ....
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 17:55:37
Nepumuk
Hallo Andreas,
teste mal:

Option Explicit
Public Sub Beispiel()
Const FOLDER_PATH As String = "Z:\Test\"
Dim strFolder As String
strFolder = GetFolder(FOLDER_PATH, "Log")
If strFolder = vbNullString Then
Call MsgBox("Nicht gefunden")
Else
Call MsgBox(strFolder)
End If
End Sub
Private Function GetFolder(ByVal pvstrPath As String, ByVal pvstrFoldername As String) As String
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
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
If strFolder = pvstrFoldername Then
GetFolder = strPath & strFolder
Exit Function
End If
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
End Function
Gruß
Nepumuk
Anzeige
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 18:27:20
Andreas
Hallo Nepumuk
dein Code hat mir den Abend gerettet. Der funktioniert genau so, wie ich ihn mir vorgstellt habe!"
Vielen Dank und schönen Abend...
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 18:01:28
Yal
Nun ja, diesmal gründlich getestet, und somit komplett anders:

'unter Anbindung vom Microsoft Scripting Runtime
' ("Extras", "Verweise...", "Microsoft Scripting Runtime" anhacken)
Private FSO As New FileSystemObject
Dim ErgebnisPfad As String
Sub Verzeichnis_suchen()
Dim Ergebnis As String
'Const StartVerzeichnis = "Z:\Test"
Dim StartVerzeichnis As Folder
Set StartVerzeichnis = FSO.GetFolder("C:\Temp\H_for")
Verzeichnis_auflisten StartVerzeichnis, "ordner3"
Debug.Print ErgebnisPfad
MsgBox ErgebnisPfad, vbOKOnly, "Ergebnis"
End Sub
Function Verzeichnis_auflisten(Pfad As Folder, Optional VerzName As String = "Log") As Boolean
Dim BasisVerz As Folder
Dim SubVerz As Folder
If InStr(1, Pfad.Path, VerzName, vbTextCompare) Then
ErgebnisPfad = Pfad
Verzeichnis_auflisten = True
Exit Function
Else
'Unterverzeichnis durchgehen (Rekursiv)
For Each SubVerz In Pfad.SubFolders
If Verzeichnis_auflisten(SubVerz, VerzName) Then Exit Function
Next SubVerz
End If
End Function
VG
Yal
Anzeige
AW: Ordner suchen in Verzeichnis Pfad ausgab
19.10.2021 18:07:50
Yal
Und wenn ich nochmal lese, bevor ich sende, dann entdecke ich auch noch, dass ich meine eigene Verzeichnisse drin gelassen hatte:

'unter Anbindung vom Microsoft Scripting Runtime
' ("Extras", "Verweise...", "Microsoft Scripting Runtime" anhacken)
Private FSO As New FileSystemObject
Private ErgebnisPfad As String
Sub Verzeichnis_suchen()
Const StartVerz = "Z:\Test"
Const SuchVerz = "log"
Verzeichnis_auflisten FSO.GetFolder(StartVerz), SuchVerz
MsgBox ErgebnisPfad, vbOKOnly, "Ergebnis"
End Sub
Private Function Verzeichnis_auflisten(Pfad As Folder, Optional VerzName As String = "Log") As Boolean
Dim BasisVerz As Folder
Dim SubVerz As Folder
If InStr(1, Pfad.Path, VerzName, vbTextCompare) Then
ErgebnisPfad = Pfad
Verzeichnis_auflisten = True
Exit Function
Else
'Unterverzeichnis durchgehen (Rekursiv)
For Each SubVerz In Pfad.SubFolders
If Verzeichnis_auflisten(SubVerz, VerzName) Then Exit Function
Next SubVerz
End If
End Function
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Ordner im Verzeichnis per VBA finden


Schritt-für-Schritt-Anleitung

Um einen Ordner in einem bestimmten Verzeichnis mithilfe von VBA zu suchen, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Aktiviere die Microsoft Scripting Runtime:

    • Gehe zu Extras > Verweise... und aktiviere Microsoft Scripting Runtime.
  4. Füge den folgenden VBA-Code ein:

    Option Explicit
    Private FSO As New FileSystemObject
    Private ErgebnisPfad As String
    
    Sub Verzeichnis_suchen()
       Const StartVerz = "Z:\Test"
       Const SuchVerz = "Log"
       Verzeichnis_auflisten FSO.GetFolder(StartVerz), SuchVerz
       MsgBox ErgebnisPfad, vbOKOnly, "Ergebnis"
    End Sub
    
    Private Function Verzeichnis_auflisten(Pfad As Folder, Optional VerzName As String = "Log") As Boolean
       Dim SubVerz As Folder
       If InStr(1, Pfad.Path, VerzName, vbTextCompare) Then
           ErgebnisPfad = Pfad.Path
           Verzeichnis_auflisten = True
           Exit Function
       Else
           For Each SubVerz In Pfad.SubFolders
               If Verzeichnis_auflisten(SubVerz, VerzName) Then Exit Function
           Next SubVerz
       End If
    End Function
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und kehre zu Excel zurück.
    • Drücke ALT + F8, wähle Verzeichnis_suchen und klicke auf Ausführen.

Der Code wird den Ordner "Log" im angegebenen Verzeichnis und allen Unterverzeichnissen suchen und dir den Pfad in einer MsgBox anzeigen.


Häufige Fehler und Lösungen

  • Fehler: "Pfad nicht gefunden"

    • Stelle sicher, dass der angegebene Startpfad korrekt ist und existiert.
  • Fehler: "Microsoft Scripting Runtime nicht aktiviert"

    • Überprüfe, ob die Microsoft Scripting Runtime in den Verweisen aktiviert ist.
  • Fehler: Keine Ergebnisse gefunden

    • Vergewissere dich, dass der gesuchte Ordnername genau übereinstimmt (Groß-/Kleinschreibung beachten).

Alternative Methoden

Falls du VBA nicht verwenden möchtest, kannst du auch die Eingabeaufforderung nutzen:

  1. Öffne das DOS-Fenster (Win + R, dann cmd eingeben).
  2. Navigiere zum Startverzeichnis:
    cd Z:\Test
  3. Führe den folgenden Befehl aus:
    dir /s /ad | find "Log"

Dieser Befehl durchsucht alle Unterverzeichnisse nach einem Ordner mit dem Namen "Log".


Praktische Beispiele

Hier sind einige Beispiele, wie du den Code anpassen kannst:

  • Suche nach einem anderen Ordnernamen: Ändere Const SuchVerz = "Log" in den gewünschten Namen, z.B. Const SuchVerz = "Ordner3".

  • Ändere den Startpfad: Passe Const StartVerz = "Z:\Test" an deinen gewünschten Startpfad an.


Tipps für Profis

  • Verwende Debug.Print im Code, um Zwischenergebnisse während der Ausführung zu überprüfen.
  • Kombiniere diese Technik mit anderen VBA-Funktionen, um automatisierte Berichte über gefundene Ordner zu erstellen.
  • Dokumentiere deinen Code gut, damit du oder andere ihn später leicht verstehen können.

FAQ: Häufige Fragen

1. Ist dieser Code mit allen Excel-Versionen kompatibel?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, solange die Microsoft Scripting Runtime aktiviert ist.

2. Kann ich auch nach Dateien suchen?
Ja, du kannst den Code anpassen, um nach bestimmten Dateinamen zu suchen, indem du die Dir-Funktion entsprechend verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige