Application.FileSearch macht einen Fehler

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Application.FileSearch macht einen Fehler von: Holger Wächter
Geschrieben am: 03.03.2005 09:09:32

Hallo,

ich habe das Problem, wenn ich die Funktion Application.FileSearch ... ausführen möchte, er eine Fehlermeldung ausgibt. Die Fehlermeldung lautet:
Die Methode 'FileSearch' für das Objekt'_Application' ist fehlgeschlagen.
Diese Fehlermeldung kommt aber nicht bei allen Computern.
Was muss ich an dem Computer wo es nicht geht einstellen, damit die Fehlermeldung in Excel-VBA nicht kommt oder gibt es eine andere Möglichkeit des Filesearches?

MfG

Holger Wächter

Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Nepumuk
Geschrieben am: 03.03.2005 17:10:43

Hallo Holger,

es gibt wesentlich schnellere Möglichkeiten nach einer Datei bzw. Dateien zu suchen.

1. Mit der Dir - Funktion (schnell)
2. Filesystemobjekt mit Late Binding (sehr schnell)
3. Filesystemobjekt mit Verweis auf scrrun.dll (noch schneller)
4. API - Funktion aus kernel32.dll (sauschnell)

Wie hättest du's denn gerne?

Gruß
Nepumuk


Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Holger Wächter
Geschrieben am: 03.03.2005 17:43:19

Hallo,

das hört sich alles ja schon mal besser an, als meine Lösung. Ich würde gerne eine Lösung haben, die natürlich sehr schnell ist, aber die ich auch einfach in meinen Code einbinden kann. Würde mich freuen, wenn Du mir einen Lösungscode schicken könntest, denn das suchen, dauert wirklich schon etwas lange mit Filesearch.

Mein jetziger Code:

Filename = ActiveWorkbook.FullName
LängeFilename = Len(Filename)
LookinFile = Left(Filename, LängeFilename - 12)

With Application.FileSearch
.NewSearch
.LookIn = LookinFile
.SearchSubFolders = True
.Filename = Format(Material) + ".pdf"
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then PdfGefunden = "Ja"
End With

With Application.FileSearch
.NewSearch
.LookIn = LookinFile
.SearchSubFolders = True
.Filename = Format(Material) + ".htm"
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then HtmGefunden = "Ja"
End With

Danke schon mal.

MfG

Holger Wächter


Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Nepumuk
Geschrieben am: 03.03.2005 18:03:31

Hallo Holger,

damit ich das richtig verstehe:

Du suchst im Pfad der Mappe mit allen Unterordnern, und nur dort? (API benötigt bei mir für ~ 7 GB mit ~ 100.000 Dateien ~ 4 Sekunden)
Du benötigst nur eine Bestätigung, dass die Dateien vorhanden sind?
Was verbirgt sich hinter dieser Formulierung: Format(Material) ?

Gruß
Nepumuk


Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Holger Wächter
Geschrieben am: 03.03.2005 20:19:04

Hi,

eigentlich suche ich nur in diesem einen Ordner. Dort sind sehr sehr viele Dateien. Und ich möchte die Datei suchen, die in der Variabel Material hinterlegt wird. Es sind alles pdf und htm - Dateien. Danach wird diese Datei im weiteren Programm geöffnet.

Richtig ich suche eigentlich nur die Bestätigung das die Datei da ist.

Ich habe eine Materialliste in Excel mit Materialnummern. Die ausgewählte Nummer übergebe ich an die Variabel Material. Und die Suchfunktion soll prüfen, ob dafür ein technisches Datenblatt in From einer pdf oder htm - Datei vorhanden ist.

Das wäre super wenn Du mir zeigen könntest wie das geht mit dem Suchen unter API, da mein Filesearch halt Probleme macht.

MfG

Holger Wächter


Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Nepumuk
Geschrieben am: 03.03.2005 21:30:44

Hallo Holger,

in diesem Fall würde dir dir DIR - Funktion auch gute Dienset leisten. Hier mal ein Beispiel für die API - Funktion:


Option Explicit

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As LongAs Long

Private Enum FILE_ATTRIBUTE
    MAX_PATH = 260
    INVALID_HANDLE_VALUE = -1
    FILE_ATTRIBUTE_ARCHIVE = &H20
    FILE_ATTRIBUTE_DIRECTORY = &H10
    FILE_ATTRIBUTE_HIDDEN = &H2
    FILE_ATTRIBUTE_NORMAL = &H80
    FILE_ATTRIBUTE_READONLY = &H1
    FILE_ATTRIBUTE_SYSTEM = &H4
    FILE_ATTRIBUTE_TEMPORARY = &H100
End Enum

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private 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 * MAX_PATH
    cAlternate As String * 14
End Type

Private Sub GetFilesInFolder(ByVal strFolderPath As StringByVal strSearch As String)
    Dim WFD As WIN32_FIND_DATA, lngSearch As Long, strFileName As String
    lngSearch = FindFirstFile(strFolderPath & strSearch, WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> FILE_ATTRIBUTE_DIRECTORY Then
            MsgBox strSearch & " gefunden.", 64, "Information"
        Else
            MsgBox strSearch & " nicht gefunden.", 64, "Information"
        End If
        FindClose lngSearch
    End If
End Sub

Public Sub test1()
    Call GetFilesInFolder(ThisWorkbook.Path & "\", "Farben.htm")
End Sub



Und das selbe mit DIR:


Public Sub test2()
    If Dir$(ThisWorkbook.Path & "\" & "Farben.htm") <> "" Then MsgBox "Datei gefunden.", 64, "Information"
End Sub


Wie du siehst, für deine Bedürfnisse ausreichend. :-)

Gruß
Nepumuk


Bild


Betrifft: AW: Application.FileSearch macht einen Fehler von: Holger Wächter
Geschrieben am: 04.03.2005 08:25:29

Hallo Nepumuk,

Du hast mir sehr geholfen. Mit der Dir - Funktion alleine ist mein Suchindex jetzt schon in ein paar Sekunden fertig und nicht in ein paar Minuten.
API werde ich an einer anderen Stelle einsetzen. Vielen Dank für alles.

MfG

Holger Wächter


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Application.FileSearch macht einen Fehler"