Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2016.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Explorer und Shell ansteuern

Hin und wieder kommt es vor, dass Sie aus Access heraus den Windows Explorer öffnen und dabei gleich ein Verzeichnis Ihrer Wahl ansteuern möchten. Gründe dafür gibt es viele. Haben Sie etwa eine Textdatei exportiert, so macht es sich gut, dem Anwender anschließend gleich den passenden Ordner zu präsentieren und dort die Datei zu markieren. Über einige Zeilen VBA-Code rund um ein Shell-Objekt ist das schnell realisiert.

Explorer aufrufen

Der Explorer ist eine Anwendung, die die Verwaltung der Windows Shell oder zumindest Teile von ihr, erlaubt. Wir erwähnen diesen Zusammenhang nur, weil später noch ausführlicher auf Shell-Objekte unter VBA eingegangen wird.

Um ausführbare Dateien zu starten, können Sie die VBA-Anweisung Shell verwenden. Sie übergeben ihr als Parameter den Pfad zur ausführbaren Datei und optional noch den Fenstermodus, in dem sie gestartet werden soll:

Shell "Explorer.exe", vbNormalFocus

Diese Zeile öffnet den Windows Explorer in einem normalen Fenster. Sie können dieses jedoch auch gleich maximieren:

Shell "Explorer.exe", vbMaximizedFocus

Den Pfad zur explorer.exe müssen Sie nicht voll ausschreiben oder kennen, da sie sich im Suchpfad von Windows befindet. War's das schon? Nein, natürlich nicht! Denn erstens gibt es noch diverse Kommandozeilenoptionen für den Explorer, die zu erläutern wären, und zweitens stellen wir noch eine Alternative zur Shell-Anweisung vor.

ShellExecute

Vielleicht ist Ihnen diese Funktion schon einmal untergekommen. Es gibt zwar eine Windows-API-Funktion gleichen Namens, doch wir verwenden sie im Zusammenhang mit der Shell-Bibliothek, wo sie ebenfalls vorkommt und auch identische Funktionalität aufweist.

Dazu benötigen wir einen Verweis auf diese Bibliothek. Öffnen Sie im VBA-Editor unter Extras|Verweise den entsprechenden Dialog und aktivieren Sie den Eintrag Microsoft Shell Controls And Automation. Diese Bibliothek ist grundsätzlich unter jeder Version von Windows vorhanden und verweist auf die shell32.dll. Nun können Sie ein Shell-Objekt anlegen:

Dim oShell As Shell32.Shell
Set oShell = New Shell32.Shell

Wenn Sie im VBA-Objektkatalog oben die Bibliothek Shell32 auswählen und links zur Shell-Klasse navigieren, so finden Sie rechts deren zahlreiche Methoden, und deren Namen sagen bereits einiges über das Thema der Klasse aus.

Uns interessiert im Moment nur die Methode ShellExecute, die ähnlich arbeitet, wie die Shell-Anweisung von VBA, jedoch mit deutlich mehr Parametern ausgestattet ist, die die Funktionalität erweitern. Mit dieser Zeile öffnen Sie den Explorer, nachdem das Shell-Objekt angelegt wurde:

oShell.ShellExecute "explorer.exe", _
     , , , "open", 1

Mehrere Parameter der Methode sind optional, was durch die Kommas deutlich wird. Zunächst erwartet die Funktion den Pfad der ausführbaren Datei, wobei dieser auch hier nicht vollständig angegeben werden muss.

Der zweite Parameter gibt die Kommandozeilenoptionen an, die der Anwendung mitgegeben werden sollen. Soll der Explorer das Verzeichnis c:\windows anzeigen, so ist hier der richtige Ort für die Pfadangabe:

oShell.ShellExecute _
     "explorer.exe", "c:\windows"

Damit weicht die Syntax dieser Funktion von der Shell-Anweisung ab, bei der beide Angaben in einem String zu kombinieren wären:

Shell "explorer.exe c:\windows"

Das macht die Sache etwas übersichtlicher. Der dritte optionale Parameter gibt den Ausführungspfad an. Wie bei Dateiverknüpfungen können Sie hier festlegen, welches Standardverzeichnis dem startenden Prozess zugeeignet wird. In der Regel kann dieser Parameter ignoriert werden.

Das Interessante an der ShellExecute-Funktion ist nun der vierte Parameter, der das sogenannte Aktions-Verb erwartet. Das sind Strings, die die auf den Prozess auszuführende Aktion angeben. Der Standard ist open für normales Starten der Anwendung. Lassen Sie den Parameter aus, so setzt Windows funktional automatisch open ein. Es gibt aber natürlich noch weitere Verben, auf die später noch die Sprache kommt.

Der letzte Parameter ist identisch mit dem der Shell-Anweisung und gibt den Fenstermodus an. Die 1 im Beispiel entspricht dem vbNormalFocus. Sie können hier also die gleichen Konstanten angeben, wie bei der Shell-Anweisung.

Damit Sie nicht in jeder Routine, die das Shell-Objekt benötigt, dieses per New neu anlegen müssen, greifen Sie zu einer Hilfsfunktion, wie in Listing 1. Dort ist in einem Modul die Variable m_Shell als globales Shell-Objekt deklariert.

Public m_Shell As Shell32.Shell
Public Function oShell() As Shell32.Shell
     If m_Shell Is Nothing Then Set m_Shell = New Shell32.Shell
     Set oShell = m_Shell
End Function

Listing 1: Funktion zum Zurückgeben des Shell-Objekts

Die Funktion oShell gibt dieses Objekt schlicht zurück, überprüft davor jedoch mit einem Test auf Nothing, ob es überhaupt gefüllt ist. Falls nicht, so wird der Variablen ein neues Shell-Objekt verabreicht. oShell können Sie nun an jeder beliebigen Stelle im VBA-Projekt verwenden, wenn Sie ein Shell-Objekt benötigen.

Kommandozeilenoptionen

Anhand der folgenden Prozeduren erläutern wir, wie sich der aufgerufene Explorer über Kommandozeilenoptionen steuern lässt (s. Listing 2).

Sub RunExplorerFolder()
     oShell.ShellExecute "explorer.exe", "c:\windows", , "open", 1
End Sub
Sub RunExplorerList()
     oShell.ShellExecute "explorer.exe", "/e,c:\", , "open", 1
End Sub
Sub RunExplorerRoot()
     oShell.ShellExecute "explorer.exe", "/e,/root,c:\windows", , "open", 1
End Sub
Sub RunExplorerSelectFolder()
     oShell.ShellExecute "explorer.exe", _
         "/select,c:\windows\system32", , "open", 1
End Sub
Sub RunExplorerSelectFile()
     oShell.ShellExecute "explorer.exe", _
         "/select,c:\windows\system32\mscomctl.ocx", , "open", 1
End Sub

Listing 2: Verschiedene Routinen mit Optionen zum Starten des Explorers

Die erste Option lernten Sie bereits kennen. Sie öffnet den Explorer mit vorgegebenem Pfad (Prozedur RunExplorerFolder). In RunExplorerList ist dem Pfad c:\windows noch ein /e, vorangestellt.

Das soll nach Aussage von Microsoft den Explorer im Modus mit Verzeichnisbaum links und Dateien rechts öffnen. Ohne dieses /e würde sich nur der Ordner allein öffnen. Diese Aussage ist für neuere Windows-Versionen nicht mehr gültig. Die geteilte Ansicht tritt in beiden Fällen ein.

Wie daraus aber zu erkennen ist, werden mehrere Optionen durch Kommas getrennt aneinander gefügt. Gibt man als weitere Option /root an, so wird der folgende Pfad als Startverzeichnis des Explorers angewählt (Prozedur RunExplorerRoot). Alle anderen Elemente sind ausgeblendet. Sie können in diesem Explorer also nicht auf darüber liegende Verzeichnisse oder Laufwerke wechseln.

Die entsprechenden Schaltflächen fehlen auch im Menüband.

Schließlich lässt sich über die Option /Select auch direkt ein Verzeichnis oder eine Datei im sich öffnenden Explorer markieren.

Dazu fügen Sie deren Pfad unmittelbar hinter die Anweisung an (Prozeduren RunExplorerSelectFile und RunExplorerSelectFolder).

Leider lässt sich diese Option nicht mit /root kombinieren.

Das bedeutet: Wenn Sie Verzeichnisse oder Dateien vormarkieren, so bleibt links leider der ganze Baum bestehen.

Der Versuch, beide Optionen dennoch zu kombinieren, führt ohne Fehlermeldung schlicht zur Anzeige des Desktops im Explorer.

Möchten Sie den Explorer mit der Auswahl Computer starten, so greifen Sie wie in Prozedur RunExplorerComputer aus Listing 3 zu einem Trick: Übergeben Sie einfach nur ein Komma als Options-String.

Sub RunExplorerComputer()
     oShell.ShellExecute "explorer.exe", ",", , "open", 1
End Sub
Sub OpenFileExplorer(sFile As String)
     oShell.ShellExecute "explorer.exe", "/select," & sFile, , "open", 1
End Sub
Sub RunExplorerSys()
     oShell.ShellExecute "explorer.exe", _
         "::{21EC2020-3AEA-1069-A2DD-08002B30309D}", , "open", 1
End Sub
Sub RunExplorerPrinters()
     oShell.ShellExecute "explorer.exe", "/e,/root, " & _

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.