Tipp 1.7 - Datei im Ordner suchen

Wie kann ich eine Datei im Pfad suchen?

Mit dieser Funktion können Sie eine Datei in einem bestimmten Odner suchen. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: FindFirstFile, FindClose - FILETIME, WIN32_FIND_DATA

Beispiel:

Option Explicit
 
Public Const MAXPATH     As Long = 260
 
Public Type FILETIME
  dwLowDateTime          As Long
  dwHighDateTime         As Long
End Type
 
Public Type WIN32_FIND_DATA
  dwFileAttributes       As Long
  ftCreationTime         As FILETIME
  ftLastAccessTime       As FILETIME
  ftLastWriteTime        As FILETIME
  nFileSizeHigh          As Long
  nFileSizeLow           As Long
  dwReserved0            As Long
  dwReserved1            As Long
  cFileName              As String * MAXPATH
  cAlternate             As String * 14
End Type
 
Public Declare Function FindFirstFile _
    Lib "kernel32" Alias _
    "FindFirstFileA" _
    (ByVal lpFileName As String, _
    lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose _
    Lib "kernel32" _
    (ByVal hFindFile As Long) As Long
 
Public Function FindFirstFileInPath( _
                sFileName As String) _
                As String
  '// -----------------------------------------------------
  '// Methode:   | Sucht eine Datei im Pfad
  '//            | benötigt Hilfsfunktion FileExists() und
  '//            | VBA 6.0+ (wegen Split-Funktion!)
  '// -----------------------------------------------------
  '// Parameter: | sFilename = gesuchte Datei
  '// -----------------------------------------------------
  '// Rückgabe:  | kompletter Pfad beim ersten Treffer
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
 
  Const csBACKSLASH   As String = "\"
  Const csSEMICOLON   As String = ";"
 
  Dim sPath           As String
  Dim sDirectories()  As String
  Dim sCurrentPath    As String
  Dim sCurrentDir     As String
  Dim lLBound         As Long
  Dim lUBound         As Long
  Dim lOffset         As Long
 
  sPath = VBA.Environ("PATH")
  If VBA.Len(sPath) > 0 Then
    If VBA.InStr(sPath, csSEMICOLON) = 0 Then
      sPath = csSEMICOLON & csSEMICOLON
    End If
    sDirectories = VBA.Split(VBA.Environ("PATH"), ";")
    lLBound = LBound(sDirectories)
    lUBound = UBound(sDirectories)
    For lOffset = lLBound To lUBound
      sCurrentDir = VBA.Trim(sDirectories(lOffset))
      If VBA.Right$(sCurrentDir, 1) <> csBACKSLASH Then
        sCurrentDir = sCurrentDir & csBACKSLASH
      End If
      sCurrentPath = sCurrentDir & sFileName
      If FileExists(sCurrentPath) Then
        FindFirstFileInPath = sCurrentPath
        Exit Function
      End If
    Next lOffset
  End If
 
End Function
 
Public Function FileExists( _
                ByVal sSource As String) _
                As Boolean
  '// -----------------------------------------------------
  '// Methode:   | Prüft ob Datei existiert
  '// -----------------------------------------------------
  '// Parameter: | sSource = gültiger Dateipfad
  '//            |           (auch UNC-Pfad)
  '// -----------------------------------------------------
  '// Rückgabe:  | True = Datei vorhanden;
  '//            | False = Datei nicht vorhanden
  '// -----------------------------------------------------
  Const INVALID_HANDLE_VALUE  As Long = -1
  Dim WFD                     As WIN32_FIND_DATA
  Dim lFile                   As Long
  On Error Resume Next
  lFile = FindFirstFile(sSource, WFD)
  '// Prüfung auf gültigen Datei-Handle
  FileExists = lFile <> INVALID_HANDLE_VALUE
  Call FindClose(lFile)
 
End Function