VBA-Shell

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on März 30, 2023

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:
vba shell notepad aufrufen

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:

vba shell schreibfehler

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)

vba shell datei oeffnen

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.

vba shell falscher dateiname

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.

vba shell prozessID zurueckgeben

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:

vba shell excel oeffnen

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.

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples