Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ordner anhand erster Zeichen finden

Ordner anhand erster Zeichen finden
04.07.2017 10:27:35
Michl
Hallo zusammen,
meine VBA-Kentnisse waren bisher immer so gut, dass ich anhand einer Google-Suche mir immer die passenden Teile von Makros zusammensuchen und an meine Bedürfnisse anpassen konnte. Nun komme ich aber leider nicht mehr weiter.
Ich stehe vor folgendem Problem:
Ich möchte in einem Ordner einen bestimmten Unterordner finden, von dessen Namen ich allerdings nur die ersten paar Zeichen kenne.
Die Ordnerstruktur sieht so aus:
ZuDurchsuchenderOrdner\Ordner1_blabla1
ZuDurchsuchenderOrdner\Ordner2_blablabla6
ZuDurchsuchenderOrdner\Ordner3_blabla657
Zu jedem Ordner weiß ich wie der Part Ordner 1 - 3 heißt, nicht jedoch den "blabla"-Part am Ende. Ich schaffe es einfach nicht mit verschiedenen Ansätzen den Ordner1 zu finden und den gesamten Ordnernamen Ordner1_blabla1 in einen String zum Abspeichern der Datei zu schreiben.
Über jeden entscheidenden Hinweis oder sogar ein passendes Codebeispiel wäre ich überaus dankbar.
Freundliche Grüße
Michl
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: API
04.07.2017 10:38:54
Fennek
Hallo,
teste mal:

Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Private Sub Test()
Dim Retval As Long, TmpStr As String * 256
' Suche beginnen
Retval = SearchTreeForFile("c:\zuDurchsuchenderOrdner\Ordner*", TmpStr)
If Retval = 0 Then
MsgBox "Es wurde keine Datei mit diesem Namen gefunden"
Else
MsgBox Left$(TmpStr, InStr(1, TmpStr, vbNullChar) - 1), , _
"Gefundene Datei"
End If
End Sub
mfg
Anzeige
AW: API
04.07.2017 11:10:43
Michl
Hallo Fennek,
vielen Dank für deinen Code. Vielleicht hätte ich noch erwähnen müssen, dass ich die 64Bit-Version von Excel nutze. Ich habe hier folgendes versucht:
Declare PtrSafe Function SearchTreeForFile Lib "imagehlp.dll" ( _
Und ich habe im Hinterkopf, dass ich auch mit "User32" irgendwie arbeiten kann, aber auch hier ist mein Wissen nicht groß genug um das zu lösen. Problem noch: Eigentlich sollte das Marko sowohl unter 32 als auch unter 64Bit laufen.
Den Rest konnte ich nach dem eben geschilderten Problem noch nicht testen.
Freundliche Grüße
Michl
Anzeige
AW: DOS
04.07.2017 11:22:11
Fennek
Hallo,
mit API's habe ich erst vor kurzem angefangen, d.h. ich finde es interessant, habe aber fast keine Erfahrung. Aber: der gezeigte Code lief auf meinem 64-bit System.
Es könnte auch mit DOS gehen. Einige Anpassungen musst du aber selbst vornehmen:

Sub M_snb_dir() 'von snb
sn = filter(Split(CreateObject("wscript.shell").exec("cmd /c dir ""c:\zuDurchsuchenderOrdner\* _
.*"" /b/s").stdout.readall, vbCrLf), "Order1")
For Each d In sn
Debug.Print d
Next d
End Sub
mfg
Anzeige
AW: DOS
04.07.2017 11:46:51
Michl
Hallo Fennek,
mit DOS habe ich quasi gar keine Erfahrung. Ich habe den Ordnerpfad entsprechend angepasst und das "Ordner1" durch einen beliebigen Ordner aus dem zu durchsuchenden Verzeichnis ersetzt. Letztendlich öffnet sich das CMD-Fenster und es passiert nichts.
Freundliche Grüße
Michl
Anzeige
AW: Ordner anhand erster Zeichen finden
04.07.2017 12:23:42
Matthias
Hallo! Das hier wäre auch noch eine Variante. Die Strings (also suche und Quellpfad anpassen). VG

Sub suche()
Dim fso As Object
Dim unterordner As Object
Dim ordner As Object
Dim quellordner As String
Dim suchname As String
Set fso = CreateObject("Scripting.FileSystemObject")
quellordner = "c:\"
suchname = "Ordner1_"
Set unterordner = fso.getfolder(quellordner).subfolders
For Each ordner In unterordner
If Left(ordner.name, Len(suchname)) = suchname Then MsgBox ordner.name
Next
End Sub

Anzeige
AW: Ordner anhand erster Zeichen finden
04.07.2017 13:32:41
Michl
Hallo Matthias,
vielen Dank. Ich konnte deinen Code erfolgreich in meinem Makro verbauen. Letztendlich habe ich mal von ein paar Namen nur die if-Zeile in folgendes für meine Bedürfnisse geändert:

If Left(ordner.Name, Len(suchname)) = suchname Then Projektpfad = Pfad & ordner.Name & "\"
Ich habe die letzten Wochen immer mal wieder an dem Problem gesessen und nun endlich ist das Makro mal von ein paar Schönheitskorrekturen fertig.
Nochmals vielen Dank!
Freundliche Grüße
Michl
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ordner anhand erster Zeichen finden


Schritt-für-Schritt-Anleitung

Um in Excel einen Ordner anhand der ersten Zeichen seines Namens zu finden, kannst du VBA nutzen. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke im Menü auf Einfügen und wähle Modul aus.

  3. Füge den folgenden Code in das Modul ein:

    Sub suche()
       Dim fso As Object
       Dim unterordner As Object
       Dim ordner As Object
       Dim quellordner As String
       Dim suchname As String
    
       Set fso = CreateObject("Scripting.FileSystemObject")
       quellordner = "c:\zuDurchsuchenderOrdner\"
       suchname = "Ordner1_"
    
       Set unterordner = fso.getfolder(quellordner).subfolders
    
       For Each ordner In unterordner
           If Left(ordner.name, Len(suchname)) = suchname Then
               MsgBox ordner.name
           End If
       Next
    End Sub
  4. Ändere die Variablen quellordner und suchname nach deinen Bedürfnissen.

  5. Führe das Makro aus, um den Ordner zu finden.


Häufige Fehler und Lösungen

  • Fehler: "Kein Ordner gefunden"

    • Überprüfe den Pfad in der Variable quellordner. Ist der Pfad korrekt?
  • Fehler: "Typ nicht definiert"

    • Stelle sicher, dass du die richtige Excel-Version verwendest. Bei 64-Bit musst du den Code anpassen und PtrSafe hinzufügen.

Alternative Methoden

Eine weitere Möglichkeit, um einen Ordner zu finden, ist die Nutzung von DOS-Befehlen. Du kannst folgenden VBA-Code verwenden:

Sub M_snb_dir()
    Dim sn As Variant
    Dim d As Variant
    sn = Filter(Split(CreateObject("wscript.shell").exec("cmd /c dir ""c:\zuDurchsuchenderOrdner\*.*"" /b/s").stdout.readall, vbCrLf), "Ordner1")

    For Each d In sn
        Debug.Print d
    Next d
End Sub

Dieser Code gibt alle Ordner, die mit "Ordner1" beginnen, in der Debug-Konsole aus.


Praktische Beispiele

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

  1. Um einen Ordner mit "Ordner2" zu finden:

    suchname = "Ordner2_"
  2. Um den Pfad zu einem spezifischen Ordner auszugeben:

    If Left(ordner.name, Len(suchname)) = suchname Then
       Projektpfad = quellordner & ordner.Name & "\"
    End If

Tipps für Profis

  • Nutze die Debug.Print-Anweisung, um den Fortschritt deiner Suche zu verfolgen.
  • Du kannst die MsgBox-Ausgabe durch eine Liste im Arbeitsblatt ersetzen, um die Ergebnisse übersichtlicher darzustellen.
  • Achte darauf, den Code modular zu halten, indem du häufig verwendete Funktionen in separate Subroutinen auslagerst.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Ordner zu finden?
Du kannst eine Schleife verwenden, um mehrere Suchbegriffe zu durchlaufen und für jeden Suchbegriff die gleiche Logik anzuwenden.

2. Funktioniert dieser Code auch in älteren Excel-Versionen?
Ja, der Code sollte in den meisten Versionen von Excel funktionieren. Stelle sicher, dass du die richtige Syntax für die verwendete Version nutzt.

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