Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Windows Explorer Suche via VBA starten

649 views
Skip to first unread message

Thomas Heiserowski

unread,
Nov 21, 2006, 12:15:14 PM11/21/06
to
Bonjour!

Ich habe jetzt schon eine Weile hier und anderswo im Netz gesucht, bin
aber leider nicht fündig geworden. Ich hoffe, dass ihr mir
weiterhelfen könnt.

Ich möchte aus Excel heraus die Suche des Windows Explorers starten.
Sie muss Parameter für den Startpunkt und den Suchbegriff übernehmen.
Danach soll sie ohne weitere Interaktion des Benutzers anfangen zu
suchen.

Wenn ich es bisher richtig verstanden haben, muss ich dazu die Windows
API verwenden und damit den Dialog aufrufen. Nur wie das genau geht,
habe ich bisher noch nicht herausfinden können.

Ich bin für jede Hilfe dankbar.

Beste Grüße,
Thomas

Robert Gelbmann

unread,
Nov 21, 2006, 12:45:37 PM11/21/06
to
Hallo Thomas!

---"Thomas Heiserowski" <th.heis...@gmail.com> schrieb ...


> Ich möchte aus Excel heraus die Suche des Windows Explorers starten.
> Sie muss Parameter für den Startpunkt und den Suchbegriff übernehmen.
> Danach soll sie ohne weitere Interaktion des Benutzers anfangen zu
> suchen.

Also, ich nehme mal an, es geht dir mehr um die Information (der
gefundenen Dateien), als um die Nutzung des Dateiexplorers.

Dann bist du nämlich mit der Office-Dateisuche um einiges besser daran:

Suche mal in der Online-Hilfe des Visual Basic-Editors nach
"FileSearch". Dort findest du auch ein schönes Anwendungsbeispiel.

--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen


Servus aus Wien,
-Robert Gelbmann-
---
The world is quiet here.

Thomas Heiserowski

unread,
Nov 21, 2006, 1:08:54 PM11/21/06
to
Hallo Robert!

Vielen Dank für Deine prompte Hilfe!

> Also, ich nehme mal an, es geht dir mehr um die Information (der
> gefundenen Dateien), als um die Nutzung des Dateiexplorers.
>
> Dann bist du nämlich mit der Office-Dateisuche um einiges besser daran:

Leider geht es mir eben um die Nutzung des Explorers. Folgender
Anwendungsfall: In einer Zelle steht der Name eines Ordners, der sich
irgendwo auf der Festplatte befindet. Um den Ordner nicht selber suchen
zu müssen, soll sich durch Klick auf die Zelle der Suchen-Dialog
öffnen und den Ordner suchen. -- Mir ist durchaus bewusst, dass das
ein ziemlicher Overhead ist. Die Enduser sollen damit aber eine einfach
Möglichkeit bekommen, den gesuchten Ordner öffnen zu können und
dabei die gewohnte Suche zu verwenden. Daran anschließend sollen in
den gesuchten Ordner Dateien verschoben werden.

Ich bin bisher schon so weit, dass ich den Dialog öffnen kann:

------------------------------------------------------------------------------

' from http://www.vbaexpress.com/kb/getarticle.php?kb_id=725
' see http://msdn2.microsoft.com/en-us/library/ms647732.aspx

Option Explicit
'API declaration for the windows "Search Results" dialog
Private Declare Function ShellSearch& Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long)

Private Const SW_SHOWNORMAL = 1

Sub ShowWindowsSearchDialog_API()
' Specified drive to Search
Const szSDrive As String = "C:\"

ShellSearch 0, "find", szSDrive, "", "", SW_SHOWNORMAL
End Sub

------------------------------------------------------------------------------

Leider kann ich auf diese Art anscheinend weder den Suchbegriff
übergeben, noch die Suche automatisch starten. Vielleicht hat hier
jemand eine Idee?

Falls das wirklich nicht geht, muss ich wohl aber doch "FileSearch"
verwenden.

Grüße aus Berlin,
Thomas

Robert Gelbmann

unread,
Nov 21, 2006, 1:16:02 PM11/21/06
to
Hallo Thomas!

---"Thomas Heiserowski" <th.heis...@gmail.com> schrieb ...

> Folgender
> Anwendungsfall: In einer Zelle steht der Name eines Ordners, der sich
> irgendwo auf der Festplatte befindet. Um den Ordner nicht selber
> suchen
> zu müssen, soll sich durch Klick auf die Zelle der Suchen-Dialog
> öffnen und den Ordner suchen.

Das kannst du dann aber *wesentlich* einfacher haben:

- Zelle markieren
- Einfügen / Hyperlink
- Link zu: Pfad oder Webseite
- Adresse: (Pfad eingeben)

Falls das Hyperlink-Ziel (sprich: der Pfad) durch Änderung eines
Zellwertes änderbar sein soll:

z. B.:
A1: C:\Windows
B1: =HYPERLINK(A1)

Wenn du nun B1 anklickst, wird - nach einer Sicherheitsrückfrage - das
Verzeichnis, das in A1 steht, geöffnet.

Wie schon angedeutet, die Sache hat nur den Haken, dass die
Sicherheitsabfrage kommt.

Thomas Heiserowski

unread,
Nov 21, 2006, 1:29:27 PM11/21/06
to
Hallo Robert!

> Das kannst du dann aber *wesentlich* einfacher haben:
>
> - Zelle markieren
> - Einfügen / Hyperlink
> - Link zu: Pfad oder Webseite
> - Adresse: (Pfad eingeben)
>
> Falls das Hyperlink-Ziel (sprich: der Pfad) durch Änderung eines
> Zellwertes änderbar sein soll:
>
> z. B.:
> A1: C:\Windows
> B1: =HYPERLINK(A1)

Auch diese Variante habe ich bereits in Betracht gezogen, musste sie
aber aus zwei Gründen verwerfen:

1) die Ordner habe unterschiedliche Basispfade
2) nicht immer steht der volle Ordnername in der Zelle, so dass er aber
über die Suche leichter gefunden werden könnte

Ich stimme Dir aber zu, dass der von Dir vorgeschlagene Weg deutlich
einfacher ist. Dennoch hat mich der sportliche Ergeiz gepackt: Es
sollte doch möglich sein, die shell32.dll mit Parametern aufzurufen.
Falls alles nicht hilft, muss ich eben einen der von Dir
vorgeschlagenen Pfade einschlagen ;)

Grüße,
Thomas

Robert Gelbmann

unread,
Nov 21, 2006, 1:24:53 PM11/21/06
to
Hallo Thomas!

---"Thomas Heiserowski" <th.heis...@gmail.com> schrieb ...

> [...] Die Enduser sollen damit aber eine einfach


> Möglichkeit bekommen, den gesuchten Ordner öffnen zu können und
> dabei die gewohnte Suche zu verwenden. Daran anschließend sollen in
> den gesuchten Ordner Dateien verschoben werden.

Folgendes hatte ich vergessen, nachzufragen:

Geht es dir vielleicht nur darum, dass der Benutzer einen Zielordner
auswählen soll, in den dann (automatisch - via VBA ) bestimmte Dateien
verschoben werden sollen?

Wenn dem so ist, dann wäre es noch nützlich (gewesen) zu wissen, welche
Excel-Version du im Einsatz hast.
Seit Excel 2002 (Office XP) gibt es nämlich das FileDialog-Objekt, das
auch als "FolderPicker" agieren kann. (sprich: als Dialogfeld, in dem
der Benutzer ein Verzeichnis auswählen kann).

Thomas Heiserowski

unread,
Nov 21, 2006, 1:39:19 PM11/21/06
to
Hallo Robert!

> Geht es dir vielleicht nur darum, dass der Benutzer einen Zielordner
> auswählen soll, in den dann (automatisch - via VBA ) bestimmte Dateien
> verschoben werden sollen?

Es sollen zwar Dateien verschoben werden, die Quelle ist aber nicht
immer eindeutig. Folgendes Use-Case:

1) Benutzer B hat Ordner mit neuen Dateien offen
2) B geht in Excel-Liste und wählt Zeile aus, in der der Name des
Ordners steht, in den die neuen Dateien kopiert werden sollen
3) B klickt auf Name in Liste
4) Suchen-Dialog öffnet sich und sucht nach dem Namen des Ordners aus
Excel-Liste
5) Suche findet Ordner
6) B öffnet gefundenen Ordner
7) B kopiert Dateien vom ersten Ordner in den gefundenen Ordner

Leider kann nicht sichergestellt werden, dass die Namen der Ordern und
der Text in der Excel-Liste hundertprozentig übereinstimmen. Daher der
Umweg über die Suche.

> Wenn dem so ist, dann wäre es noch nützlich (gewesen) zu wissen, welche
> Excel-Version du im Einsatz hast.

Excel 2003

> Seit Excel 2002 (Office XP) gibt es nämlich das FileDialog-Objekt, das
> auch als "FolderPicker" agieren kann. (sprich: als Dialogfeld, in dem
> der Benutzer ein Verzeichnis auswählen kann).

Geht eben leider nicht, weil die Bezeichner der betroffenen Ordner
nicht gleich sein müssen und weil Hauptziel war, dass der Benutzer den
Ordner nicht in mehreren hundert selber suchen soll.

Grüße,
Thomas

Robert Gelbmann

unread,
Nov 21, 2006, 1:35:15 PM11/21/06
to
Hallo Thomas!

---"Thomas Heiserowski" <th.heis...@gmail.com> schrieb ...

> Ich stimme Dir aber zu, dass der von Dir vorgeschlagene Weg deutlich
> einfacher ist. Dennoch hat mich der sportliche Ergeiz gepackt: Es
> sollte doch möglich sein, die shell32.dll mit Parametern aufzurufen.
> Falls alles nicht hilft, muss ich eben einen der von Dir
> vorgeschlagenen Pfade einschlagen ;)

Was hältst du davon?

'---snip---
strVerzeichnis = Range("A1").Value 'z. B.: "C:\Windows"
Shell "explorer.exe " & Chr(34) & strVerzeichnis & Chr(34)
'---snip---

Eric March

unread,
Nov 22, 2006, 3:29:43 AM11/22/06
to
Thomas Heiserowski schrieb:

> Es sollen zwar Dateien verschoben werden, die Quelle ist aber nicht
> immer eindeutig. Folgendes Use-Case:
>
> 1) Benutzer B hat Ordner mit neuen Dateien offen
> 2) B geht in Excel-Liste und wählt Zeile aus, in der der Name des
> Ordners steht, in den die neuen Dateien kopiert werden sollen
> 3) B klickt auf Name in Liste

Bis hierhin logisch, aber:
Warum liegt das als Excel Liste vor?
-> Dafür gibt es Links oder Leisten fürs Startmenü oder...
Wer legt diese Ordnerliste denn überhaupt an?
-> Wer schlampt mit unpräzisen oder nicht genau anpassbaren
Ordnerstrukturen? Ein Ordner Juni oder ein gekürzetes Datum 1706 könnten
überall sein.

> 4) Suchen-Dialog öffnet sich und sucht nach dem Namen des Ordners aus
> Excel-Liste

Warum öffene und nicht rein theoretisch schon im Hintergrund?
-> gleich

> 5) Suche findet Ordner
> 6) B öffnet gefundenen Ordner

Wieso das? Ist der Pfad erkannt kann mittels Shell-Aufruf (wie schon
angegegben) direkt der Explorer am Ziel geöffnet werden. Mehr Komfort
geht wohl nicht.

> 7) B kopiert Dateien vom ersten Ordner in den gefundenen Ordner

Ich gehe mal davon aus, dass im Quellordner ganz viele Dateien sind und
unser B-nutzer nur b-stimmte verlagern möchte.

> Leider kann nicht sichergestellt werden, dass die Namen der Ordern und
> der Text in der Excel-Liste hundertprozentig übereinstimmen. Daher der
> Umweg über die Suche.

Irrtum. Ansonsten hat das komplette System einen gravierenden Fehler der
darauf rausliefe, dass der B-nutzer am b-sten gleich selber die Suche
oder in einem 2. Explorer die Naviagation b-müht.
Eine unbrauchbare Suchliste ist - unbrauchbar eben.


--
Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi

Thomas Heiserowski

unread,
Nov 24, 2006, 6:16:26 AM11/24/06
to
Hallo Robert!

On Nov 21, 7:35 pm, "Robert Gelbmann" <rgelbm...@mvps.org> wrote:
> '---snip---
> strVerzeichnis = Range("A1").Value 'z. B.: "C:\Windows"
> Shell "explorer.exe " & Chr(34) & strVerzeichnis & Chr(34)
> '---snip---

Nach vergeblichen Versuchen haben wir es jetzt so gelöst. Danke für
Deine Hilfe!

On Nov 22, 9:29 am, Eric March <"Eric March"> wrote:
> Wer schlampt mit unpräzisen oder nicht genau anpassbaren
> Ordnerstrukturen? Ein Ordner Juni oder ein gekürzetes Datum 1706 könnten
> überall sein.

> [...]


> Wieso das? Ist der Pfad erkannt kann mittels Shell-Aufruf (wie schon
> angegegben) direkt der Explorer am Ziel geöffnet werden. Mehr Komfort
> geht wohl nicht.

> [...]


> Irrtum. Ansonsten hat das komplette System einen gravierenden Fehler der
> darauf rausliefe, dass der B-nutzer am b-sten gleich selber die Suche
> oder in einem 2. Explorer die Naviagation b-müht.
> Eine unbrauchbare Suchliste ist - unbrauchbar eben.

Hallo Eric!

Vielen Dank auch für Deinen Anregungen. Leider handelt es sich um ein
Mehrbenutzersystem, was zwangsläufig zur Folge hat, dass --- auch weil
nicht jeder perfekt --- nicht jeder auf die gleiche Art arbeitet und
sich daher auch einmal Fehler einschleichen. Die Lösung, die wir auf
Anregung von Robert umgesetzt haben, ist nun nicht das Ziel, dass wir
verfolgt hatten, aber nahe genug dran.

Man liest sich,
Thomas

0 new messages