Problemstellung:
Nur für 32Bit Office Versionen
Wie kann ich mit API prüfen ob eine Datei bzw. Verzeichnis existiert?
Lösung:
Folgenden Code in ein neues Modul kopieren.
Public Declare Function FindFirstFile _ Lib "kernel32" Alias "FindFirstFileA" ( _ ByVal lpFileName As String, _ lpFindData As tpWin32FindData) As Long Public Declare Function FindClose _ Lib "kernel32" ( _ ByVal hFindFile As Long) As Long Private Type tpFileTime dwLowDateTime As Long dwHighDateTime As Long End Type Private Type tpWin32FindData dwFileAttributes As Long ftCreationTime As tpFileTime ftLastAccessTime As tpFileTime ftLastWriteTime As tpFileTime nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cstrFileName As String * 512 cAlternate As String * 14 End Type Public Enum enFileType eFile = 1 eFolder = 2 End Enum Public Function DoesFileExistAPI(sFileName As String, _ Optional FileType As enFileType = eFile) As Boolean Dim typFindData As tpWin32FindData Dim lngRet As Long lngRet = FindFirstFile(sFileName, typFindData) If lngRet <> -1 Then If typFindData.dwFileAttributes And 16 Then If FileType = eFolder Then DoesFileExistAPI = True End If Else If FileType = eFile Then DoesFileExistAPI = True End If End If lngRet = FindClose(lngRet) End If End Function
Aufruf z.B.:
If DoesFileExistAPI("F:\Access\tk_Rechnen_mit_Zeiten00.zip", eFile) = True Then MsgBox "Datei " & "F:\Access\tk_Rechnen_mit_Zeiten00.zip" & " existiert" Else MsgBox "Datei " & "F:\Access\tk_Rechnen_mit_Zeiten00.zip" & " existiert nicht!" End If
Ergebnis:
oder
If DoesFileExistAPI("F:\Access1", eFolder) = True Then MsgBox "Verzeichnis " & "F:\Access1" & " existiert" Else MsgBox "Verzeichnis " & "F:\Access1" & " existiert nicht!" End If
Ergebnis:
Ähnliche Artikel
Weiterlesen...