VBA CMD Output in eine Variable speichern
Schritt-für-Schritt-Anleitung
Um die Ausgabe eines CMD-Befehls in eine Variable in Excel VBA zu speichern, kannst Du die folgende Vorgehensweise nutzen. In diesem Beispiel verwenden wir das WScript.Shell
-Objekt, um einen CMD-Befehl auszuführen und die Ausgabe in einer Variable zu speichern.
-
Öffne den VBA-Editor in Excel (ALT + F11).
-
Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
-
Kopiere und füge den folgenden Code in das Modul ein:
Sub Aufruf()
Dim objShell As Object, objExec As Object
Dim strTarget As String
Dim strResult As String
' CMD-Befehl definieren
strTarget = "cmd /c ping www.herber.de"
' WScript.Shell-Objekt erstellen
Set objShell = CreateObject("WScript.Shell")
' CMD-Befehl ausführen
Set objExec = objShell.Exec(strTarget)
' Ausgabe lesen, bis das Ende erreicht ist
Do While Not objExec.StdOut.AtEndOfStream
strResult = objExec.StdOut.ReadLine()
Debug.Print strResult ' Ausgabe in das Direktfenster
Loop
' Objekte freigeben
Set objShell = Nothing
Set objExec = Nothing
End Sub
-
Führe das Makro aus, um die Ausgabe des ping
-Befehls in der Debug-Konsole zu sehen.
Häufige Fehler und Lösungen
Alternative Methoden
Eine andere Möglichkeit, die Ausgabe eines CMD-Befehls zu erhalten, ist die Verwendung von Shell
anstelle von Exec
. Beachte jedoch, dass Shell
die Ausgabe nicht direkt zurückgibt.
Dim returnValue As Long
returnValue = Shell("cmd /c dir C:\", vbNormalFocus)
Hierbei erhältst Du jedoch nicht die Ausgabe, sondern nur den Rückgabewert des CMD-Befehls (Errorlevel).
Praktische Beispiele
-
Ping-Befehl mit Errorlevel abfragen:
Sub PingTest()
Dim objShell As Object
Dim strOutput As String
Set objShell = CreateObject("Wscript.Shell")
strOutput = objShell.Exec("cmd /c ping www.google.com & echo %ERRORLEVEL%").StdOut.ReadAll()
Debug.Print strOutput
End Sub
-
MSI-Installation auf einem Remote-PC:
Sub InstallMsi()
Dim objShell As Object
Dim strCmd As String
strCmd = "cmd /c C:\temp\PSExec.exe \\PC0001 -u Administrator -p 1234Test msiexec.exe /i C:\Software\Sun125.msi & echo %ERRORLEVEL%"
Set objShell = CreateObject("Wscript.Shell")
Debug.Print objShell.Exec(strCmd).StdOut.ReadAll()
End Sub
Tipps für Profis
- Nutze
Debug.Print
, um die Ausgaben während der Entwicklung zu überprüfen.
- Setze
Option Explicit
am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
- Experimentiere mit verschiedenen CMD-Befehlen, um zu sehen, wie sie in VBA funktionieren, z.B.
dir
, tasklist
, etc.
FAQ: Häufige Fragen
1. Wie kann ich die Ausgabe eines CMD-Befehls in eine Excel-Zelle schreiben?
Du kannst die Ausgabe einfach einer Zelle zuweisen, indem Du den Wert von strResult
in eine Zelle schreibst, z.B.:
Cells(1, 1).Value = strResult
2. Was ist der Unterschied zwischen Exec
und Run
in VBA?
Exec
ermöglicht es, die Standardausgabe eines Befehls zu lesen, während Run
den Befehl ausführt, ohne die Ausgaben zurückzugeben.
3. Wie kann ich mehrere CMD-Befehle in einer Zeile ausführen?
Verwende &
zwischen den Befehlen, z.B.:
strTarget = "cmd /c dir C:\ & echo %ERRORLEVEL%"