VBA Tipp: Feststellen, ob eine Datei vorhanden ist

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Es soll feststellt werden, ob eine Datei in einem Verzeichnis vorhanden ist.

Lösung 1

Das geht mit folgender Funktion, die in einem globalen Modul hinterlegt wird.

Public Function DateiExistiert(ByVal Dateipfad As Variant) As Boolean
 
   ' Quelle: http://www.dbwiki.net/
 
   On Error Resume Next
   DateiExistiert = Not (GetAttr(Dateipfad) And vbDirectory) = vbDirectory
 
End Function


Lösung 2

Das geht mit folgender Funktion, die in einem globalen Modul hinterlegt wird.

Public Function DateiExistiert(ByVal Dateipfad As Variant) As Boolean
 
   ' Quelle: http://www.dbwiki.net/
 
   On Error Resume Next 
   DateiExistiert = CreateObject("Scripting.FileSystemObject").FileExists(Dateipfad)
 
End Function


Lösung 3

Das geht mit folgender Funktion, die in einem globalen Modul hinterlegt wird.
Die Lösung 3 ist nicht für alle Fälle geeignet (siehe Hinweis unten).

Public Function DateiExistiert(ByVal Dateipfad As Variant) As Boolean
 
   ' Quelle: http://www.dbwiki.net/
 
   On Error Resume Next
   DateiExistiert = Dir(Dateipfad) <> ""
 
End Function

Aufruf

   Dim strPfad As String
 
   strPfad = "D:\Mein Pfad\Meine Datei.txt"
 
   If DateiExistiert(strPfad) Then
      MsgBox "Die Datei existiert."
   Else
      MsgBox "Die Datei existiert nicht."
   End If
Wiki hinweis.png

Hinweis zu Lösung 3:
Die Funktion in Lösung 3 ist nicht in allen Fällen einsetzbar, denn

• die Funktion erkennt ein reines Verzeichnis, in dem mindestens 1 Datei existiert, auch als Datei.
• die Funktion kann nicht zuverlässig innerhalb einer Schleife der Dir-Funktion verwendet werden.


Lösung 4

Kopiere folgenden Code in ein allgemeines VBA-Modul.

#If VBA7 Then
Private Declare PtrSafe Function GetFileAttributesW Lib "kernel32" ( _
   ByVal lpFileName As LongPtr) As Long
#Else  'VBA6 (Office-Versionen <= 2007)
Private Declare Function GetFileAttributesW Lib "kernel32" ( _
   ByVal lpFileName As Long) As Long
#End If
 
Public Function FileExists(Path As String) As Boolean
   Dim dwAttrib As Long
 
   Const INVALID_FILE_ATTRIBUTES  As Long = &HFFFFFFFF
   Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10
 
   dwAttrib = GetFileAttributesW(StrPtr(Path))
 
   FileExists = (dwAttrib <> INVALID_FILE_ATTRIBUTES) And _
                (dwAttrib And FILE_ATTRIBUTE_DIRECTORY) = 0
 
End Function

Weblinks