Tipp 1.18 - Existiert Ordner

Wie kann ich prüfen, ob ein Ordner existiert?

Mit dieser Funktion können Sie prüfen, ob ein Ordner existiert. 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 FolderExists( _
                ByVal sFolder As String) _
                As Boolean
  '// -----------------------------------------------------
  '// Methode:   | Prüft ob Ordner existiert
  '// -----------------------------------------------------
  '// Parameter: | sSource = gültiger Ordnerpfad
  '//            |           (auch UNC-Pfad)
  '// -----------------------------------------------------
  '// Rückgabe:  | True = Ordner vorhanden;
  '//            | False = Ordner nicht vorhanden
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
 
  Const FILE_ATTRIBUTE_DIRECTORY  As Long = &H10
  Const INVALID_HANDLE_VALUE      As Long = -1
  Dim uWFD                        As WIN32_FIND_DATA
  Dim lFile                       As Long
 
  '// Zunächst Leerzeichen und ggf.
  '// endenden Backslash abschneiden
  sFolder = VBA.Trim$(sFolder)
  If VBA.Right$(sFolder, 1) = "\" Then
    sFolder = VBA.Left$(sFolder, VBA.Len(sFolder) - 1)
  End If
  lFile = FindFirstFile(sFolder, uWFD)
  '// Prüfung auf gültigen Datei-Handle
  '// und auf Verzeichnisattribut
  FolderExists = (lFile <> INVALID_HANDLE_VALUE) And _
      (uWFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)
  Call FindClose(lFile)
 
End Function