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

Forumthread: Mit VBA: Dateisuche in Ordnern

Mit VBA: Dateisuche in Ordnern
Giuseppe
Hallo Liebe Excelfreunde
"With Application.FileSearch" funktioniert seit 2007 nicht mehr...
Ich möchte mittels VBA eine Datei suchen lassen:
Suchen im Ordner C:\Test
Suchen nach Excel-Dateien die mit "abc" beginnen
Resultat: gefunden oder nicht gefunden
A1: C:\Test
A2: abc
A3: gefunden
Bitte um Hilfestellung
mfG
Salnet
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 11:32:44
Giuseppe
@Reinhard
Vielen Dank für den Hinweis/link
Funktioniert als eigenständige Datei tadellos.
Ich sollte das Makro jedoch in eine Bestehende Datei einbauen...
und dafür ist es mir zu komplex...
Welchen Teil brauche ich, aus all diesen Makros?
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 13:18:11
Hajo_Zi
Hallo Guiseppe,
Option Explicit
' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.
' Der VB Code ist aus dem Beitrag  _
http://www.activevb.de/tipps/vb6tipps/tipp0492.html
' Verweis: Microsoft Scripting Runtime
' Originalcode
'Dim i As Long
'With Application.FileSearch
'    .NewSearch
'    .LookIn = ActiveWorkbook.Path   'Suchverzeichnis
'    .SearchSubFolders = False       'True wäre mit Unterverzeichnissen
'    .Filename = "*.csv"             'Dateien die mit .csv änden
'    .Execute                        'suche ausführen
'    For i = 1 To .FoundFiles.Count
'        Application.StatusBar = "-->>   Einlesen der Datei:  " & i & " / " & .FoundFiles.Count  _
& "  

Anzeige
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 13:29:57
Giuseppe
@Hajo_Zi
Vielen Dank, sieht sehr vielversprechend aus :-)
...doch leider gibts bei
"Dim FSO As New FileSystemObject"
eine Fehlermeldung
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 13:49:36
Rudi
Hallo,
du hast den Verweis auf die Microsoft Scripting Runtime nicht gesetzt.
So geht's auch ohne:
Private Sub SearchInFolder(ByVal Folderspec As String)  ' auslesen aufrufen mit Ordnername
Dim StTyp As String                                 ' Dateityp
Dim FSO As Object
Dim SearchFolder As Object
Dim FD As Object, FI As Object
Dim EachFil As Object, EachFold As Object
Dim LoI As Long    ' Laufvariable zum schreiben der Ordner
Set FSO = CreateObject("Scripting.Filesystemobject")
StTyp = "xlsm"
Set SearchFolder = FSO.GetFolder(Folderspec)
Set EachFil = SearchFolder.Files            ' Dateien in der jeweiligen Root
'   Dateien auslesen
For Each FI In EachFil                      ' Schleife über alle Dateien
'       Dateityp feststellen
If UCase(Right(FI.Name, Len(FI.Name) - InStrRev(FI.Name, "."))) = UCase(StTyp) Then
Call importieren_und_verschieben(FI.Name)
End If
Next FI
Set EachFil = Nothing
Set EachFold = Nothing
Set FSO = Nothing
End Sub

Gruß
Rudi
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 14:26:08
Giuseppe
@All
Nun sieht das komplette Makro wie folgt aus und funktioniert wunderbar:
Option Explicit
Sub Start()
SearchInFolder ThisWorkbook.Path
End Sub
Private Sub SearchInFolder(ByVal Folderspec As String)  ' auslesen aufrufen mit Ordnername
Dim StTyp As String                                 ' Dateityp
Dim FSO As Object
Dim SearchFolder As Object
Dim FD As Object, FI As Object
Dim EachFil As Object, EachFold As Object
Dim LoI As Long    ' Laufvariable zum schreiben der Ordner
Set FSO = CreateObject("Scripting.Filesystemobject")
StTyp = "xlsm"
Set SearchFolder = FSO.GetFolder(Folderspec)
Set EachFil = SearchFolder.Files            ' Dateien in der jeweiligen Root
'   Dateien auslesen
For Each FI In EachFil                      ' Schleife über alle Dateien
'       Dateityp feststellen
If UCase(Right(FI.Name, Len(FI.Name) - InStrRev(FI.Name, "."))) = UCase(StTyp) Then
Call importieren_und_verschieben(FI.Name)
End If
Next FI
Set EachFil = Nothing
Set EachFold = Nothing
Set FSO = Nothing
End Sub
Sub importieren_und_verschieben(StDatei As String)
MsgBox StDatei
End Sub ... Wie kann man nun das Ergebnis in den Zellen A1 bis A*** darstellen?
... Wo kann man das zu auflistende Verzeichnis definieren?
Danke
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
11.07.2011 15:31:54
Rudi
Hallo,
Private Sub SearchInFolder(ByVal Folderspec As String)  ' auslesen aufrufen mit Ordnername
Dim StTyp As String                                 ' Dateityp
Dim FSO As Object
Dim SearchFolder As Object
Dim FD As Object, FI As Object
Dim EachFil As Object, EachFold As Object
Dim LoI As Long    ' Laufvariable zum schreiben der Ordner
Set FSO = CreateObject("Scripting.Filesystemobject")
StTyp = "xls"
Set SearchFolder = FSO.GetFolder(Folderspec)
Set EachFil = SearchFolder.Files            ' Dateien in der jeweiligen Root
'   Dateien auslesen
For Each FI In EachFil                      ' Schleife über alle Dateien
'       Dateityp feststellen
If UCase(Right(FI.Name, Len(FI.Name) - InStrRev(FI.Name, "."))) = UCase(StTyp) Then
Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = FI 'anpassen
End If
Next FI
Set EachFil = Nothing
Set EachFold = Nothing
Set FSO = Nothing
End Sub

Gruß
Rudi
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
12.07.2011 09:34:08
Giuseppe
Danke Rudi
Funktioniert fast perfekt...
Nun möchte ich jedoch den such-Ordner bestimmen.
Der steht bei Sheets("Inhalt").Range("Q25")
----
Option Explicit
Sub Inhalt()
SearchInFolder ThisWorkbook.Path
End Sub
Private Sub SearchInFolder(ByVal Folderspec As String)  ' auslesen aufrufen mit Ordnername
Dim StTyp As String                                 ' Dateityp
Dim FSO As Object
Dim SearchFolder As Object
Dim FD As Object, FI As Object
Dim EachFil As Object, EachFold As Object
Dim LoI As Long    ' Laufvariable zum schreiben der Ordner
Set FSO = CreateObject("Scripting.Filesystemobject")
StTyp = "xlsm"
Set SearchFolder = FSO.GetFolder(Folderspec)
Set EachFil = SearchFolder.Files            ' Dateien in der jeweiligen Root
'   Dateien auslesen
For Each FI In EachFil                      ' Schleife über alle Dateien
'       Dateityp feststellen
If UCase(Right(FI.Name, Len(FI.Name) - InStrRev(FI.Name, "."))) = UCase(StTyp) Then
Sheets("Inhalt").Cells(Rows.Count, 1).End(xlUp).Offset(1) = FI 'anpassen
End If
Next FI
Set EachFil = Nothing
Set EachFold = Nothing
Set FSO = Nothing
End Sub
---
Grüsse Salnet
Anzeige
AW: Mit VBA: Dateisuche in Ordnern
12.07.2011 09:39:57
Rudi
Hallo,
ist doch ganz einfach.
Sub Inhalt()
SearchInFolder Sheets("Inhalt").Range("Q25")
End Sub

Gruß
Rudi
AW: Mit VBA: Dateisuche in Ordnern
12.07.2011 10:09:31
Giuseppe
...nun gibt aber ein error bei:
Set SearchFolder = FSO.GetFolder(Folderspec)
das größte Problem ist, ...
12.07.2011 12:32:08
Rudi
Hallo,
.... dass du überhaupt nicht verstehst, was der Code macht.
den Ordner Sheets("Inhalt").Range("Q25") gibt es nicht.
Da muss schon ein gültiger Ordner drin stehen.
Gruß
Rudi
Anzeige
AW: das größte Problem ist, ...
12.07.2011 12:55:21
Giuseppe
Dim Folder As String
Folder = Sheets("Inhalt").Range("Q25")
SearchInFolder Folder
geht auch nicht...
...das größte Problem ist, dass wissen relativ ist... :-)
dass du einen...
12.07.2011 13:20:42
Rudi
Hallo,
...ungültigen Pfad einer Variablen zuweist, ändert nichts an der Ungültigkeit.
Was steht in Sheets("Inhalt").Range("Q25")?
Gruß
Rudi
Anzeige
AW: dass du einen...
12.07.2011 13:49:09
Giuseppe
P:\Dokumentationen\Filter\0.1\40133-0861e Dolab\
Dies wechselt jedoch... Listen-Auswahl
Ordnerinhalt auslesen
12.07.2011 18:09:36
Anton
Hallo Giuseppe,
probier's hiermit:
Code:

Private Sub SearchInFolder(ByVal Folderspec As String)       ' auslesen aufrufen mit Ordnername
  Dim StTyp As String  
  Dim FSO As Object  
  Dim FI As Object  
  Set FSO = CreateObject("Scripting.Filesystemobject")  
  If Not FSO.FolderExists(Folderspec) Then  
    MsgBox Folderspec & " ist nicht vorhanden."
    Set FSO = Nothing  
    Exit Sub  
  End If  
  StTyp = "xls" ' Dateityp
 'Dateien auslesen
  For Each FI In FSO.GetFolder(Folderspec).Files           ' Schleife über alle Dateien
   'Dateityp feststellen
    If UCase(FSO.GetExtensionName(FI)) = UCase(StTyp) Then    
      Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = FI  'anpassen
    End If  
  Next
  Set FSO = Nothing  
End Sub  


mfg Anton
Anzeige
Test oT
13.07.2011 18:14:22
Anton
oT
AW: Test oT
13.07.2011 18:41:19
Giuseppe
Hallo Anton
Habe dein Makro eingefügt, ergänzt und vielfach getestet.
Es funktioniert einwandfrei!
Vielen Dank für deine Hilfe!
Grüsse
Giuseppe
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mit VBA Dateien in Ordnern suchen und auflisten


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Option Explicit
    
    Sub SucheDateien()
       Dim Folder As String
       Folder = Sheets("Inhalt").Range("Q25").Value
       SearchInFolder Folder
    End Sub
    
    Private Sub SearchInFolder(ByVal Folderspec As String)
       Dim StTyp As String
       Dim FSO As Object
       Dim FI As Object
       Set FSO = CreateObject("Scripting.Filesystemobject")
    
       If Not FSO.FolderExists(Folderspec) Then
           MsgBox Folderspec & " ist nicht vorhanden."
           Exit Sub
       End If
    
       StTyp = "xlsm" ' Dateityp definieren
       For Each FI In FSO.GetFolder(Folderspec).Files
           If UCase(FSO.GetExtensionName(FI)) = UCase(StTyp) Then
               Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = FI
           End If
       Next FI
       Set FSO = Nothing
    End Sub
  4. Makro ausführen: Gehe zurück zu Excel, drücke ALT + F8, wähle SucheDateien und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Ungültiger Pfad
    Lösung: Stelle sicher, dass der Pfad in Sheets("Inhalt").Range("Q25") gültig ist. Überprüfe, ob der Ordner existiert.

  • Fehler: Verweis auf Microsoft Scripting Runtime fehlt
    Lösung: Klicke im VBA-Editor auf Extras > Verweise und aktiviere Microsoft Scripting Runtime.

  • Fehler: Kein Ergebnis angezeigt
    Lösung: Überprüfe den Dateityp in der Variable StTyp. Stelle sicher, dass die Dateien im angegebenen Ordner auch wirklich den festgelegten Typ haben.


Alternative Methoden

  • Excel-Funktionen verwenden: Du kannst die Funktion =ZÄHLENWENN() nutzen, um nach bestimmten Dateinamen in einer Liste zu suchen, die du manuell pflegst.

  • Windows Explorer verwenden: Nutze die Windows Explorer Suche nach Dateityp, um Excel-Dateien direkt zu finden, bevor du sie mit VBA weiterverarbeitest.


Praktische Beispiele

  1. Excel-Dateien nach einem bestimmten Muster suchen: Ändere StTyp in deinem Code, um nach Dateien zu suchen, die mit "abc" beginnen:

    If UCase(Left(FI.Name, 3)) = "ABC" Then
  2. Suchergebnisse in bestimmten Zellen darstellen: Anstelle von Sheets(1) kannst du eine spezifische Tabelle angeben, um die Ergebnisse zu speichern, z.B. Sheets("Suchergebnisse").


Tipps für Profis

  • Dynamische Dateitypen: Lass den Benutzer über ein Eingabefeld den Dateityp angeben, um die Flexibilität deines Skripts zu erhöhen.

  • Fehlerprotokollierung: Implementiere ein zusätzliches Skript, das Fehler in einer Protokolldatei speichert, falls beim Suchen oder Auflisten der Dateien ein Problem auftritt.


FAQ: Häufige Fragen

1. Wie kann ich den Suchordner dynamisch ändern?
Du kannst den Pfad in einer beliebigen Zelle speichern und im Code darauf verweisen, z.B. Sheets("Inhalt").Range("Q25").Value.

2. Kann ich mehrere Dateitypen suchen?
Ja, passe die Bedingung im Code an, um mehrere Dateitypen zu berücksichtigen, z.B. durch eine Liste in einer Tabelle und eine Schleife, die über diese Liste iteriert.

3. Wie finde ich alle Excel-Dateien in Unterordnern?
Füge eine zusätzliche Schleife hinzu, die die Unterordner durchläuft, indem du FSO.GetFolder(Folderspec).SubFolders 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