shaggy84
Goto Top

Über VBA Makro in Excel DOS Befehle ausführen

Guten Morgen face-smile

Ich habe folgendes Problem. Ich möchte gerne in Excel ein VBA Makro schreiben, welches mir ermöglicht mehrere DOS Befehle nacheinander aus zu führen.

Momentan mache ich dies über CMD, es soll aber nun in Excel automatisiert werden, da ich dort die Ergebnisse dieser Befehle, eine TXT, später importiere.

Grüße, Shaggy84

Content-Key: 64062

Url: https://administrator.de/contentid/64062

Printed on: April 25, 2024 at 14:04 o'clock

Mitglied: 8644
8644 Jul 18, 2007 at 07:00:01 (UTC)
Goto Top
Hi,

warum denn keine Batch-Datei? Hier kannst du genauso mitloggen!

Psycho
Member: bastla
bastla Jul 18, 2007 at 07:14:13 (UTC)
Goto Top
Hallo Shaggy84!

In VBA gibt es dafür "Shell", allerdings würde ich auch, so wie Psycho Dad, eine Batchdatei empfehlen, und sei es nur wegen des zeitlichen Ablaufes: Mit "Shell" kannst Du zwar das Programm starten, aber es wird nicht gewartet, bis dieses zu Ende ist, sondern in VBA gleich die nächste Anweisung ausgeführt ...

Grüße
bastla
Member: Shaggy84
Shaggy84 Jul 19, 2007 at 11:46:00 (UTC)
Goto Top
Das stellt kein Problem dar. Es soll nur eine kleine Anweisung ausführen:

'MSINFO32 Report erstellen  
Dim x
x = Shell("cmd /c winmsd.exe /report c:\msinfo32.txt /categories +SystemSummary+ComponentsStorage")  

Jetzt soll die Befehlzzeile allerdings noch um das Attribut
 /computer 123xyz 
erweitert werden.
Dieses Attribut "123xyz" würde ich gerne direkt einer Excel Zelle entnehmen. Kann mir jemand helfen, wie ich so etwas in den Code implementiere?
Member: bastla
bastla Jul 19, 2007 at 11:55:34 (UTC)
Goto Top
Hallo Shaggy84!

Entweder ín eine Variable schreiben oder gleich direkt so:
x = Shell("cmd /c winmsd.exe /report c:\msinfo32.txt /categories +SystemSummary+ComponentsStorage /" & Sheets("Tabelle1").Range("B9").Value)  
Anstelle von Range() kannst Du auch Cells(Zeile, Spalte) verwenden.

Grüße
bastla
Member: Shaggy84
Shaggy84 Jul 19, 2007 at 13:05:43 (UTC)
Goto Top
Danke bastla, funktioniert wunderbar!

kannst du mir noch verraten, wie ich in VB Skript mehrere Eingaben im gleichen Fenster nacheinander ausführen kann?

Es geht um den Bewnutzerwechsel, die anschließende Eingabe des Passwortes, und das ausführen eines PRogrammes, aber sieh am besten selbst mal kurz hier:
'MSINFO32 Report erzeugen  
Dim x, y, z
x = Shell("runas /user:" & Sheets("Auswertung").Range("A29").Value & " cmd")  
y = Shell(Sheets("Auswertung").Range("B29").Value)  
z = Shell("/c winmsd.exe /computer " & Sheets("Auswertung").Range("C29").Value & " /report c:\msinfo32.txt /categories +SystemSummary+ComponentsStorage")  

Die erste "x" Zeile wird noch ausgehührt. Danach wird im Fenster die Eingabe des Passwortes verlangt. Dieses möchte ich mit der "y" Zeile übergeben und anschließend "z" ausführen. Wenn ich nur x'se eingebe funktioniert es auch nicht und in einer Zeile kann ich es nicht schreiben.

Wo liegt der Trick?
Member: bastla
bastla Jul 20, 2007 at 07:37:11 (UTC)
Goto Top
Hallo Shaggy84!

Der Trick wurde eigentlich oben schon genannt: eine Batch-Datei. face-wink

In der von Dir beschriebenen Form rufst Du 3 verschiedene Shells auf, die nix miteinander zu tun haben. Wenn Du es vorweg schaffst, alle erforderlichen Infos per VBA zu erhalten und daraus eine einzige Kommandozeile zu bauen, kann es klappen - einfacher ist es, per "Shell" nur eine einzelne Batchdatei aufzurufen, in welcher der Rest abgehandelt wird.

Ein manchmal auch funktionierender Ausweg könnte noch die Verwendung von "&" sein, um CMD-Befehle zu verknüpfen.

Grüße
bastla
Member: Shaggy84
Shaggy84 Jul 20, 2007 at 13:16:37 (UTC)
Goto Top
Ich schau mal.

Es sollte im VBA Code bleiben, da ich direkt dort auf Excel Zellen zugreife. Wüsste net wie ich das aus einer Batch Datei machen sollte.

Ich find schon noch ne Lösung die ich dann auch hier präsentiere ;)
Danke für die schnelle Antworten
Member: bastla
bastla Jul 20, 2007 at 16:08:13 (UTC)
Goto Top
Hallo Shaggy!

Einer Batchdatei kannst Du beim Aufruf ja eine Menge Parameter (die ausgelesenen Tabellenwerte) mitgeben ...

Grüße
bastla