Herbers Excel-Forum - das Archiv
Application.FileSearch macht einen Fehler
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
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
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
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
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
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 Long) As 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 String, ByVal 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
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