Clever-Excel-Forum

Normale Version: Beliebige Datei auf Rechner finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Excel Profis,
wie kann ich per VBA Programmierung eine beliebige Datei auf dem Laufwerk C finden?
Mein bisherige Code funktioniert leider nicht.

Code:
Option Explicit

Private Declare PtrSafe Function SearchPath Lib "kernel32" Alias "SearchPathA" (ByVal lpPath As String, ByVal lpFileName As String, ByVal lpExtension As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long

Sub Filesearch()
    
     Dim sFile As String
     Dim nResult As String
     Dim sBuffer As String
    
     ' Datei, nach der gesucht werden soll
    
     sFile = "Suchdatei.pdf"
    
     ' Buffer für die Rückgabe des Verzeichnisses
     Const MAX_PATH = 260
     sBuffer = Space$(MAX_PATH)
    
     ' Suchvorgang starten...
     nResult = SearchPath(vbNullString, sFile, "", Len(sBuffer), sBuffer, vbNullString)
    
     If nResult > 0 Then
          ' Datei gefunden
          sBuffer = Left(sBuffer, InStr(sBuffer, "\" & sFile))
          MsgBox sBuffer
     Else
          ' Datei nicht gefunden
          MsgBox "Datei nicht gefunden!"
     End If
End Sub


Code durch Einrücken strukturiert und strukturiert dargestellt durch 3. Button von rechts im Beitragsformular: #
Moderator
[Bild: smilie.php?smile_ID=1810]
Hallo Sonja,

der funktioniert z.B.

Code:
Option Explicit

#If Win64 Then
  Private Declare PtrSafe Function SearchTreeForFile Lib "imagehlp.dll" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
     ByVal OutputPathBuffer As String) As Long
#Else
  Private Declare Function SearchTreeForFile Lib "imagehlp.dll" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
     ByVal OutputPathBuffer As String) As Long
#End If

Sub FindFile()
'Variablendeklarationen
'String
Dim strFile As String * 1024, strFindFile As String
'wenn API etwas zurückgibt, dann
If SearchTreeForFile("D:\", "*Schember*", strFile) Then
   'FullName der Datei zurueckgeben
   strFindFile = Left$(strFile, InStr(strFile, vbNullChar) - 1)
'wenn API nichts zurückgibt, dann
Else
   'leeren String zurueckgeben
   strFindFile = ""
'Ende wenn API etwas zurückgibt, dann
End If
'Meldung ausgeben
MsgBox strFindFile
End Sub

Wenn Deine Datei öfters vorhanden ist, wären die API FindFirst, FindNext usw. brauchbar.
*schember* musst Du mit deinem Dateinamen ersetzen.