Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

FileSearch geht an einem PC, am anderen nicht

FileSearch geht an einem PC, am anderen nicht
07.12.2006 10:31:03
horrscht6
Hallo miteinander,
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Prüfe auf beiden PCs per "Extras - Verweise"
07.12.2006 12:37:29
NoNet
...die aktivierten Verweise (auch die Reihenfolge und die damit verknüpften Dateien).
Insbesondere "Visual Basic for Applications" und die "Microsoft Excel X.0 Object Library" sollten aktiviert sein. Evtl. musst du auf dem Office 2003 PC die "Microsoft Excel 11.0 Object Library" manuell einbinden (MSO11.DLL).
Viel Erfolg dabei !
Gruß, NoNet
AW: ..... auf beiden PCs geprüft, noch kein Erfolg
07.12.2006 13:25:31
horrscht6
Hallo!
Ich habe auf beiden PCs im VBA-Bereich wie beschrieben die "Extras"
-> "Verweise" nachgesehen und es waren auf beiden PCs dieselben
Optionen gewählt und in derselben Reihenfolge aktiv:
Visual Basic For Applications
Microsoft Excel 11.0 Object Library
OLE Automation
Microsoft Office 11.0 Object Library
Microsoft Forms 2.0 Object Library
Ref Edit Control
Microsoft Windows Common Controls 6.0 (SP6)
Desweiteren existiert keine MSO11.DLL.
Folgende Zuordnungen existieren:
Microsoft Excel 11.0 Object Library =>
==> C:\Programme\Microsoft Office\OFFICE11\EXCEL.EXE
Microsoft Office 11.0 Object Library =>
==> C:\Programme\Gemeinsame Dateien\Microsoft Shared\OFFICE11\MSO.DLL
Also auch nachdem ich meine Excel-AddIn nochmal auf beide PCs draufkopiert
habe (Win XP Pro SP2 + Office 2003 Pro UND Win 2k Pro SP4 + Office 2003 Pro),
existiert keine Chance, dass die FileSearch-Methode mal auf beiden PCs
gleichartig verläuft: Beim Win2K-Rechner kriege ich alle Datei-Such-Ergebnisse
wie gewünscht und beim WinXP-Rechner kriege ich kein einziges Suchergebnis.
Ich denke jetzt zwar nicht, dass das am Betriebssystem liegt, aber irgendwie
muss dieses Phänomen doch erklärbar sein oder vereinheitlicht werden können?
Für jeden weiteren Tip bin ich dankbar.
Gruß,
Matthias
Anzeige
AW: FileSearch geht an einem PC, am anderen nicht
07.12.2006 13:40:26
Stefan
Hallo Matthias,
Schau Dir das mal an -
http://dbforums.com/t950682.html
- ist zwar genau das umgekehrte Problem, aber eventuell die Loesung fuer Dich.
Schoene Gruesse
Stefan
AW: Danke! Der Index-Dienst war schuld
07.12.2006 15:40:16
horrscht6
Hallo Stefan!
Dein Link, genaues Lesen (des englisch-sprachigen Forums) und Ausprobieren brachte es echt ans Licht:
Als ich den Index-Dienst von Windows beendet hatte, fand er nach einem Excel-Neustart und anschließendem FileSearch alles, was ich finden wollte (und natürlich auch vorhanden war).
Danke für den guten & hilfreichen Tipp.
Gruß,
Matthias
Anzeige
Windows Index-Dienst gestartet oder nicht?
07.12.2006 16:13:02
horrscht6
Hallo nochmal an die Community!
Nachdem mir Stefan dankenswerter den passenden Tipp gegeben hat und der Indexdienst von Windows offensichtlich an der fehlgeschlagenen FileSearch-Routine schuld war, wirft sich nun eine neue Frage auf, die hier scheinbar nirgendwo im Excel-Forum gestellt oder gefragt wurde (habe komplettes Excel-Forum durchsuchen lassen):
a) Wie stelle ich fest, ob ein bestimmter Windows-Dienst gestartet ist oder nicht?
In diesem Fall: Ob der Indexdienst gestartet ist oder nicht?
b) Gibt es eine Möglichkeit von Excel-VBA aus einen Windows-Dienst zu terminieren oder
zu starten?
Danke & Gruß,
Matthias
Anzeige
AW: Windows Index-Dienst gestartet oder nicht?
07.12.2006 16:32:59
Stefan
Hallo Matthias,
Fuer Frage 1 kann ich weiterhelfen:

Sub IndexServiceTest()
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process", , 48)
For Each objitem In colItems
If objitem.Caption = "cisvc.exe" Then
MsgBox "Indexservice laeuft"
Exit Sub
End If
Next
End Sub

Fuer Frage 2 lass ich die Frage mal auf offen.
Schoene Gruesse
Stefan
AW: Windows Index-Dienst gestartet oder nicht?
07.12.2006 16:40:42
Stefan
Und hier noch die Antwort auf Frage 2. Der folgende Code stopped den Indexservice falls vorhanden, und startet ihn falls nicht:

Sub IndexServiceStartStop()
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process", , 48)
For Each objitem In colItems
If objitem.Caption = "cisvc.exe" Then
Shell "NET STOP cisvc"
Exit Sub
End If
Next
Shell "NET START cisvc"
End Sub

Schoene Gruesse
Stefan
Anzeige
AW: Alles gelöst.
07.12.2006 17:42:29
horrscht6
Hallo Stefan!
Ich habe an Deinen Examples gesehen, dass ich es nun auch kurz vorher genauso gelöst habe. Ein Kollege gab mir die richtigen Windows Scripting Befehle bzw. Teil-Module um das Excel-AddIn zu vervollständigen. Dennoch danke für die Mühen!
Das fertige Excel-AddIn kann man sich hier als ZIP holen, testen & ggf. Anregungen geben (V1.0.21):
http://franken-outsource.de/vbtools
Gruß,
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige