Tipp 0449 Dateien in vorgegebenen Verzeichnis ermitteln
Autor/Einsender:
Datum:
  Angie
11.05.2005
Entwicklungsumgebung:   Excel 2000
Für die Dateisuche in einem vorgegebenen Verzeichnis wird die FileSearch-Methode des Application-Objekts benutzt. Mit dem Parameter
  .NewSearch werden die Suchkriterien auf die Standardeinstellungen zurückgesetzt.
(Die Eigenschaftswerte werden nach jeder durchgeführten Suche beibehalten.)
  .LookIn wird das Verzeichnis festgelegt, in dem gesucht werden soll.
  .SearchSubFolders wird festgelegt, ob auch die Unterverzeichnisse durchsucht werden sollen.
  .FileName wird die Auswahl der Dateiendung festgelegt.
  .FileType wird der Dateityp angegeben, hier Excel-Arbeitsmappen.
Die Suche beginnt mit der Execute-Methode, in diesem Beispiel nach Namen sortiert. Mit der FoundFiles-Methode wird sowohl die Anzahl (.FoundFiles.Count) als auch der Dateiname inkl. Pfad (.FoundFiles(Index)) der gefundenen Dateien im angegebenen Verzeichnis zurückgegeben.
Weitere Infos zum FileSearch-Objekt können der VBA-Hilfe entnommen werden.
Die folgende Funktion gibt True zurück, wenn Excel-Arbeitsmappen im vorgegebenen Verzeichnis gefunden wurden, und ein ein-dimensionales Datenfeld, das die Dateinamen inkl. Pfad beinhaltet.
 
Public Function GetXLFiles(ByRef astrXLFiles() As String, _
      ByVal strLookIn As String, Optional fSearchSubfolders _
      As Boolean = False) As Boolean

  Dim nFilesCnt   As Long
  Dim nFile       As Long
  Dim nCounter    As Long
  Dim strFileName As String

  On Error Resume Next
  With Application.FileSearch
    .NewSearch
    .LookIn = strLookIn
    .SearchSubFolders = fSearchSubfolders
    .FileName = ".xls"
    .FileType = msoFileTypeExcelWorkbooks

    If .Execute(SortBy:=msoSortByFileName, SortOrder:= _
          msoSortOrderAscending, AlwaysAccurate:=True) > 0 Then

      nFilesCnt = .FoundFiles.Count
      ReDim astrXLFiles(0 To nFilesCnt - 1)

      nCounter = -1
      For nFile = 1 To nFilesCnt
        strFileName = .FoundFiles(nFile)
        If Len(Dir$(strFileName)) > 0 Then
          nCounter = nCounter + 1
          astrXLFiles(nCounter) = strFileName
        End If
      Next

      If nCounter > -1 Then
        ReDim Preserve astrXLFiles(0 To nCounter)
        GetXLFiles = True
      End If
    End If
  End With
  On Error GoTo 0
End Function
 
Beispiel-Aufruf
Die obige Funktion zur Ermittlung von Arbeitsmappen in einem vorgegebenen Verzeichnis kann in vielen Anwendungen eingesetzt werden, beispielsweise um die Dateinamen in ein Tabellenblatt auszugeben, oder in einer ListBox/ComboBox aufzulisten.
In folgendem Beispiel werden lediglich zur Demo die Dateinamen im Direktfenster ausgegeben.
 
Public Sub Demo()
  Dim strPath       As String
  Dim astrXLFiles() As String
  Dim nFile         As Long

  strPath = ThisWorkbook.Path

  If Len(Dir$(strPath, vbDirectory)) > 0 Then
    If GetXLFiles(astrXLFiles(), strPath, True) Then

      For nFile = 0 To UBound(astrXLFiles)
        Debug.Print astrXLFiles(nFile)
      Next

      Erase astrXLFiles
    Else
      MsgBox "Keine Excel-Arbeitsmappen im Verzeichnis " & _
            vbCrLf & strPath & vbCrLf & "gefunden!", _
            vbInformation, "VB-fun-Demo"
    End If
  Else
    MsgBox "Das Verzeichnis " & vbCrLf & strPath & vbCrLf & _
          "existiert nicht!", vbInformation, "VB-fun-Demo"
  End If
End Sub
 
Hinweis
Die im Download befindliche *.bas-Datei kann in Excel (auch in Word und PowerPoint) im VB-Editor importiert werden.

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (2 kB) Downloads bisher: [ 1124 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Mittwoch, 18. Mai 2011