VBA-Shell
In this Article
In diesem Tutorial zeigen wir Ihnen, wie Sie die VBA-Funktion Shell verwenden können.
Mit der VBA-Funktion Shell können wir ein separates, ausführbares Programm aus einem VBA-Programm aus aufrufen. Wenn wir zum Beispiel Notepad von Excel aus öffnen müssen, können wir die VBA-Funktion Shell dazu verwenden. Wenn der Shell-Aufruf erfolgreich ist, gibt er den Windows TaskID-Wert des aufgerufenen Programms zurück. Schlägt der Shell-Aufruf fehl, gibt er Null zurück.
Shell hat zwei Eingabeparameter: einen erforderlichen Pfadnamen für das aufzurufende Programm und einen optionalen Windowstyle-Wert, der den Stil des Fensters, in dem das Programm ausgeführt wird, steuert. Der Pfadname kann den Programmpfad bzw. das Programmverzeichnis und Argumente enthalten.
Shell aufrufen
Dieser Code kann Teil eines Makros zum Ausführen von Notepad bilden, da er den VBA-Call-Befehl verwendet, um die Shell-Funktion aufzurufen.
Call Shell("notepad", vbNormalFocus)
Zum Beispiel:
Shell Wait
Mit dem VBA-Befehl Wait können wir den Aufruf des Shell-Befehls für eine bestimmte Zeit verzögern.
Application.Wait (Now + TimeValue("00:00:05"))
Call Shell("notepad", vbNormalFocus)
Daher werden 5 Sekunden vergehen, bevor der Shell-Befehl aufgerufen wird.
Rückgabe eines Fehlers aus der Shell-Funktion
Wenn ein Fehler beim Aufruf der Shell-Funktion in unserem Code auftritt, wird ein Fehler zurückgegeben und unser Code wechselt in den Debug-Modus.
In diesem Makro haben wir zum Beispiel „notepad“ falsch geschrieben.
Call Shell("note pad", vbNormalFocus)
Das Ergebnis der Ausführung dieses Makros wird Folgendes sein:
Vorhandene Datei mit Shell öffnen
Wenn wir eine bestimmte Datei mit dem Shell-Befehl öffnen wollen, können wir den Dateinamen in unseren Code aufnehmen.
Call Shell("Notepad.exe C:\\demo\shell_test.txt", vbNormalFocus)
Wenn wir den Dateinamen falsch schreiben, wird die Datei nicht gefunden und es erscheint eine Meldung, in der wir gefragt werden, ob wir eine neue Datei erstellen möchten.
Von der Shell-Funktion verwendete Parameter
Die Shell-Funktion hat 2 Parameter und zwar den Namen des aufzurufenden Programms und den Fensterstil, den das Programm verwenden soll. In den obigen Beispielen haben wir vbNormalFocus verwendet, was bedeutet, dass das Programm (in diesem Fall Notepad) im Fokus steht, wenn es geöffnet wird, und dass es in der Standardposition und -größe auf dem PC geöffnet wird.
Shell bietet fünf weitere Optionen:
vbHide Versteckt das Fenster und setzt den Fokus darauf
vbMinimizedFocus Zeigt das Fenster als Symbol mit Fokussieung an
vbMaximizedFocus Öffnet das Programm in einem maximierten Fenster mit Fokussieung
vbNormalNoFocus Stellt das Fenster in seiner letzten Position und Größe wieder her
vbMinimizedNoFocus Zeigt das Fenster als Symbol an und das derzeit aktive Fenster bleibt aktiv
Rückgabe einer Prozess-ID aus dem Shell-Befehl
Wenn wir den Shell-Befehl ausführen, gibt er eine Prozess- oder Task-ID zurück. Wir können die Prozess-ID in einer Variablen speichern und diese bei der Ausführung eines anderen Befehls verwenden. Zum Beispiel den Befehl TaskKill , um die Notepad-Datei zu schließen.
Sub PIDTesten()
Dim ProzessID As Integer
prozessID = Shell("notepad", vbNormalFocus)
Call Shell("Taskkill /F /PID " + CStr(prozessID))
MsgBox ("Notepad ProcessID = " + CStr(prozessID))
End Sub
In der ersten Zeile wird NotePad geöffnet und die Prozess-ID wird von Windows mit einem Wert belegt. Wir speichern diesen Wert in der Variablen ProzessID. Anschließend verwenden wir TaskKill, um Notepad zu zwingen, die gerade geöffnete NotePad-Instanz zu schließen. Der Schalter /F zwingt Notepad dazu, sich zu beenden und der Schalter /PID weist TaskKill an, nach dem Wert der Notepad-Prozess-ID zu suchen. Die Funktion CStr konvertiert ProzessID in das String-Format, das sowohl Shell als auch MsgBox in der nächsten Zeile benötigen.
Andere Programme mit Shell aufrufen
Shell kann jedes andere Windows-Programm öffnen. Dieser Code ruft z. B. Excel auf und öffnet die Excel-Datei „Beispiel_Arbwirsmappe.xlsx“:
Call Shell("Excel ""C:\\DEMO\example_workbook.xlsx""", vbNormalFocus)
Hier wird die geöffnete Datei angezeigt:
ShellExecute und ShellExecuteEx im Vergleich zum Shell-Befehl
Die Windows-Programmierumgebung bietet die Funktionen ShellExecute und ShellExecuteEx, mit denen externe Programme aus dem Softwarecode aus aufgerufen werden können. Im Vergleich zur VBA-Shell-Funktion bieten diese Windows-Funktionen mehr Flexibilität, werden aber von VBA nicht unterstützt und daher in diesem Artikel nicht behandelt.