folgende Situation stellt mich vor Probleme im Zusammenhang mit der FileSearch-Routine:
Am einen PC (Windows 2000 SP4 + Office 2003 Pro) funktioniert mein Excel-AddIn mit nachfolgender FileSearch-Routine. Am Heim-PC (Windows XP Pro SP2 + Office 2003 Pro) funktioniert dieselbe Routine nicht, das heißt es kommt kein Suchergebnis für jedewede Suchmaske zurück. Woran kann das liegen? Gibt es ggf. auch alternative FileSearch-Routinen?
Private Function GetFileSearch(ByVal sLookIn As String, _
Optional varFileFilter As Variant, Optional _
fSearchSubfolders As Boolean = False) As Variant
Dim DezimalPunkt As String
Dim astrFiles() As String
Dim ErgFeld() As Boolean
Dim nZwOk As Boolean
Dim nFilesCnt As Long
Dim nZw As Long
Dim N, M As Long
Dim strFileName As String
Dim nEcht As Long
Dim nCnt As Long
' Aufbau für astrFiles (zur späteren Auswertung/Anzeige im AddIn) ==>
' Feld 1: Dateiname komplett mit Pfad
' Feld 2: Dateiname ohne Pfad
' Feld 3: Datei-Datum und Uhrzeit
' Feld 4: Dateigröße (mit Dezimalpunkten und Text "Bytes")
' Feld 5: Kompletter Dateipfad (ohne Dateinamen)
' Feld 6: Dateigröße (ohne Dezimalpunkte und Texte)
' Feld 7: ID-Nummer für einen eindeutigen Datensatz-Kennung
On Error Resume Next
With Application.FileSearch
.NewSearch
.LookIn = sLookIn
.SearchSubFolders = fSearchSubfolders
If Not IsMissing(varFileFilter) Then
.FileName = varFileFilter
Else
.FileType = msoFileTypeAllFiles
End If
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending, _
AlwaysAccurate:=True) > 0 Then
nFilesCnt = .FoundFiles.Count
ReDim ErgFeld(1 To nFilesCnt)
nEcht = 0
For N = 1 To nFilesCnt
strFileName = .FoundFiles(N)
DezimalPunkt = ""
DezimalPunkt = FileLen(strFileName)
nZwOk = True
If N > 1 Then
If N <= 10 Then nZw = 1 Else nZw = N - 10
For M = nZw To N - 1
If strFileName = .FoundFiles(M) Then nZw = False
Next M
End If
If Len(DezimalPunkt) > 0 And sLookIn = Left$(strFileName, Len(sLookIn)) And nZwOk Then
nEcht = nEcht + 1
ErgFeld(N) = True
Else
ErgFeld(N) = False
End If
Next N
ReDim astrFiles(1 To 7, 1 To nEcht)
nEcht = 0
For N = 1 To nFilesCnt
strFileName = .FoundFiles(N)
If ErgFeld(N) = True Then
nEcht = nEcht + 1
astrFiles(1, nEcht) = strFileName
astrFiles(7, nEcht) = Mid$(Str(nEcht), 2)
astrFiles(3, nEcht) = FileDateTime(strFileName)
DezimalPunkt = ""
DezimalPunkt = Str$(FileLen(strFileName))
DezimalPunkt = Mid$(DezimalPunkt, 2)
astrFiles(6, nEcht) = DezimalPunkt
If Len(DezimalPunkt) > 6 Then
DezimalPunkt = Left$(DezimalPunkt, Len(DezimalPunkt) - 6) & "." & Mid$(DezimalPunkt, Len(DezimalPunkt) - 5, 3) & "." & Right$(DezimalPunkt, 3) & " Bytes"
Else
If Len(DezimalPunkt) > 3 Then
DezimalPunkt = Left$(DezimalPunkt, Len(DezimalPunkt) - 3) & "." & Right$(DezimalPunkt, 3) & " Bytes"
Else
DezimalPunkt = DezimalPunkt & " Bytes"
End If
End If
astrFiles(4, nEcht) = DezimalPunkt
Do
strFileName = Right$(strFileName, (Len(strFileName) - InStr(strFileName, "\")))
Loop While InStr(strFileName, "\") > 0
astrFiles(2, nEcht) = strFileName
astrFiles(5, nEcht) = Left$(astrFiles(1, nEcht), Len(astrFiles(1, nEcht)) - Len(strFileName))
End If
Next N
GetFileSearch = astrFiles
End If
End With
On Error GoTo 0
End Function
Es wäre wirklich super, wenn mir da jemand sagen könnte, ob er/sie gleiche/ähnlich Erfahrungen wie oben geschildert gemacht hat und ob es Alternativen zur FileSearch von Excel gibt.
Besten Dank für Eure Hilfe im voraus,
Matthias