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

Forumthread: Dateiordner nach Dateinamen suchen und öffnen

Dateiordner nach Dateinamen suchen und öffnen
29.07.2016 12:52:49
Markus
Hallo zusammen!
Ich bin seit 2 Tagen dabei eine Excelliste zu basteln über die ich Zip Datein leichter/ schneller finde indem ich nur einen Teil des Namens in ein Feld eintrage und danach mit dem Befehlsbutton Suchen mir öffnen lasse.
Dies funktioniert einwandfrei! - Solange ich einen festen Ordner vorgebe in dem er suchen soll.
Mein Problem: Ich möchte dass er nicht nur den angegebenen Ordner durchforstet sondern auch deren Unterordner.
Gesucht wird nach Produktteilen die in verschiedenen Ordnern abliegen. Um eine Übersicht zu gewährleisten kann ich keinen globalen Ordner, wo alle Produkte drin sind anlegen und 2 mal sollen die Produkte nicht abliegen, somit müssen die Unterordner bestehen bleiben.
Mein Makro:

Sub DateienAuflisten()
Dim strVerzeichnis As String
Dim strTyp As String
Dim strDateiname As String
Dim loZeile As Long
Dim Datei As String
strTyp = "*.zip"
Application.ScreenUpdating = False
strVerzeichnis = "i:\DATEIPFAD\ÜBERORDNER\SPEZIELLER_UNTERORDER\"
strDateiname = Dir(strVerzeichnis & strTyp)
loZeile = 1
Datei = ActiveSheet.Range("F13")  'hier tippe ich die ersten paar Zahlen ein, wie der  _
Dateiname anfängt
With ThisWorkbook.Worksheets(7) 'Tabellenblatt 7---- Wird in Finaldatei schon mit Namen  _
angesprochen, falls Tabellenblatt mal verschoben wird.
Do While strDateiname  ""
If InStr(strDateiname, Datei) > 0 Then .Cells(14, 1) = strDateiname  ' Zelle A14,   _
_
hier wird der Link zur gefundenen Datei kurz abgespeichert
strDateiname = Dir
'loZeile = loZeile + 1
Loop
End With
ActiveWorkbook.FollowHyperlink strVerzeichnis & ActiveSheet.Range("A14")
Application.ScreenUpdating = True
MsgBox "fertig"   'Hier fange ich das Makro nur kurz ab, damit ich sehe, ob ich eine  _
Endlosschleife drin habe.
Range("A14").Select
Selection.ClearContents   'hier lösche ich den kurz abgespeicherten Link wieder raus
End Sub

Ich habe schon versucht einfach nur den Backslash am Ende zu entfernen damit er in die Unterordner geht zum Suchen, was er aber nicht macht und im Internet habe ich bis jetzt keine nützliche Lösung meines Problems gefunden.
Ich hoffe ihr könnt mir weiterhelfen, besten Dank schonmal und ein schönes Wochenende,
Gruß Markus
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiordner nach Dateinamen suchen und öffnen
29.07.2016 13:05:03
Fennek
Hallo,
sofern es nur einen Unterordner geben kann, hilft "FSO"(file.scripting.obeject) mit der Funktion "Subfolder" recht gut.
Wenn es viele Ebenen geben kann, ist der alte DOS-Befehl

dir *.zip /s/b > c:\temp\Datei_Liste.txt
besser (auch direkt aus xl vba)
mfg
Anzeige
AW: Dateiordner nach Dateinamen suchen und öffnen
29.07.2016 13:14:20
Markus
Kann mir gerade nicht ganz vorstellen, wo ich genau deine Zeile jetzt wie hinzufügen soll bzw etwas ersetzen soll.
Der Pfad sieht Beispielshalber so aus :
i:\DATEIPFAD\ÜBERORDNER\SPEZIELLER_UNTERORDER1\ 20ZipDateien
______________________\SPEZIELLER_UNTERORDER2\ 25ZipDateien
______________________\SPEZIELLER_UNTERORDER3\ 35ZipDateien
______________________\SPEZIELLER_UNTERORDER4\ 70ZipDateien
Nun soll er alle speziellen Unterordner nach meiner Zip durchsuchen.
Könntest du mir das mal in mein Makro als Kommentar einfügen was du verbessern möchtest? Also deine gesamte neue Zeile als Kommentar unter die, die ich ersetzen soll, damit ich besser nachvollziehen kann.
MfG Markus
Anzeige
AW: Dateiordner nach Dateinamen suchen und öffnen
29.07.2016 13:33:44
Fennek
Hallo,
deinen Code werde ich nicht prüfen.
Eine Kurzfassung:

Sub sFold()
sPath = "c:\users\office\"
sFile = "*.zip"
ar = Split(CreateObject("wscript.shell").exec("cmd /c Dir " & sPath & sFile & " /b /s").stdout. _
readall, vbCrLf)
For i = 0 To UBound(ar)
Debug.Print ar(i) 'gibt ins VBA Direktfenster alle Pfad + Dateinamen aus
Next i
End Sub
mfg
Anzeige
AW: Dateiordner nach Dateinamen suchen und öffnen
01.08.2016 07:04:21
Markus
Hallo!
Das bringt mich nicht zu meiner Lösung und hilft mir auch nicht.
DU sollst nicht mein Makro prüfen, es funktioniert.
Lediglich bat ich darum eine Idee ins laufende Makro einzubinden, was ich dann geprüft hätte.
Ich habe nicht umsonst dieses Thema eröffnet und darum gebeten die Zeile so einzufügen, dass ich es mir anschauen und ausprobieren kann.
mfg
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dateiordner nach Dateinamen durchsuchen und öffnen


Schritt-für-Schritt-Anleitung

Um dein Excel-Makro so zu erweitern, dass es auch in Unterordnern nach Zip-Dateien sucht, kannst du die folgenden Schritte befolgen:

  1. Öffne Dein Excel-Dokument und gehe zum VBA-Editor (Alt + F11).
  2. Füge das folgende VBA-Skript in ein Modul ein:
Sub DateienAuflisten()
    Dim strVerzeichnis As String
    Dim strTyp As String
    Dim strDateiname As String
    Dim loZeile As Long
    Dim Datei As String
    strTyp = "*.zip"
    Application.ScreenUpdating = False
    strVerzeichnis = "i:\DATEIPFAD\ÜBERORDNER\"  ' Passe diesen Pfad an
    loZeile = 1
    Datei = ActiveSheet.Range("F13")  ' Hier gibst du den Suchbegriff ein
    Call SucheInUnterordnern(strVerzeichnis, Datei, loZeile)
    Application.ScreenUpdating = True
    MsgBox "Fertig"
End Sub

Sub SucheInUnterordnern(ByVal strVerzeichnis As String, ByVal Datei As String, ByRef loZeile As Long)
    Dim strDateiname As String
    Dim Unterordner As Object
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")

    For Each Unterordner In FSO.GetFolder(strVerzeichnis).SubFolders
        strDateiname = Dir(Unterordner.Path & "\" & "*.zip")
        Do While strDateiname <> ""
            If InStr(strDateiname, Datei) > 0 Then
                ThisWorkbook.Worksheets(7).Cells(loZeile, 1).Value = strDateiname
                loZeile = loZeile + 1
            End If
            strDateiname = Dir
        Loop
        Call SucheInUnterordnern(Unterordner.Path, Datei, loZeile)  ' Rekursive Suche in Unterordnern
    Next Unterordner
End Sub
  1. Stelle sicher, dass der Pfad in strVerzeichnis korrekt ist und alle benötigten Ordner enthält.
  2. Teste das Makro, indem du einen Suchbegriff in Zelle F13 eingibst und das Makro ausführst.

Häufige Fehler und Lösungen

  • Fehler: "Typenübereinstimmung fehlgeschlagen"

    • Überprüfe, ob die Zelle F13 tatsächlich einen gültigen Suchbegriff enthält.
  • Fehler: "Der Pfad ist ungültig"

    • Stelle sicher, dass der angegebene Pfad zu einem existierenden Ordner führt. Verwende doppelte Backslashes (\) oder einfache (/) im Pfad.
  • Fehler: Keine Ergebnisse gefunden

    • Überprüfe, ob die Zip-Dateien tatsächlich in den Unterordnern vorhanden sind und ob der gesuchte Teil des Namens korrekt ist.

Alternative Methoden

Eine andere Methode, um Zip-Dateien in Unterordnern zu finden, ist die Verwendung des DOS-Befehls über VBA:

Sub SucheMitDOS()
    Dim sPath As String
    sPath = "i:\DATEIPFAD\ÜBERORDNER\"
    Shell "cmd.exe /c dir " & sPath & "*.zip /s /b > c:\temp\Datei_Liste.txt", vbHide
End Sub

Diese Methode schreibt alle gefundenen Pfade in eine Textdatei. Du kannst die Datei anschließend mit Excel importieren.


Praktische Beispiele

Wenn du die oben genannten Methoden ausprobierst, achte darauf, dass du verschiedene Suchbegriffe in Zelle F13 eingibst, um die Flexibilität deines Makros zu testen. Zum Beispiel:

  • Suchbegriff: ProduktA
  • Suchbegriff: 2023_Dokument

Tipps für Profis

  • Nutze die Möglichkeit, deine Makros zu optimieren, indem du die Anzahl der Bildschirmaktualisierungen während der Ausführung minimierst.
  • Verwende die Debug.Print-Anweisung, um den Fortschritt deiner Datei-Suche im Direktfenster zu verfolgen.
  • Teste regelmäßig, um sicherzustellen, dass dein Makro in verschiedenen Ordnerstrukturen zuverlässig funktioniert.

FAQ: Häufige Fragen

1. Kann ich das Makro auch für andere Dateiformate anpassen?
Ja, ändere einfach den strTyp-Wert in der DateienAuflisten-Subroutine auf das gewünschte Format, z.B. "*.txt" für Textdateien.

2. Gibt es eine Möglichkeit, die Suchgeschwindigkeit zu erhöhen?
Eine Möglichkeit ist, die Anzahl der Suchordner zu reduzieren oder die Suche auf bestimmte Unterordner zu beschränken, wenn möglich.

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