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.
Verwendete 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