VBA cmd output

Hallo zusammen.

Ich führe über shell() eine Abfrage aus und zwar so:

For i = 2 To pcs
cmd = "osql -E -S " & Worksheets("Sheet3").Range("A" & i).Value & " -Q ""SELECT @@VERSION"""
If (Shell(cmd, vbHide)) Then
 Worksheets("Sheet3").Range("B" & i).Value = "ja"
End If
Next i

Die Funktion Shell() gibt mir ein true oder false, je nach dem ob der command erfolgreich ausgeführt wurde.

Nun reicht mir das nicht, denn ich möchte den Output lesen, sprich, das was in dem cmd-prompt steht, ich weiss, wenn ich cmd = „osql -E -S " & Worksheets(„Sheet3“).Range(„A“ & i).Value & " -Q „„SELECT @@VERSION““ > C:\output.txt“ mit > C:\output.txt ergänze, habe ich den Output des cmd-Prompts in der Datei output.txt und kann es über IO lesen!! Jedoch, kann man das nicht direkt mit dem shell oder sonst wie durchführen, wäre um jeden Beitrag dankbar.

Grüsse Sebastian

Hi Sebastian,

Ich führe über shell() eine Abfrage aus und zwar so:

For i = 2 To pcs
cmd = „osql -E -S " & Worksheets(„Sheet3“).Range(„A“ &
i).Value & " -Q „„SELECT @@VERSION“““
If (Shell(cmd, vbHide)) Then
Worksheets(„Sheet3“).Range(„B“ & i).Value = „ja“
End If
Next i

Die Funktion Shell() gibt mir ein true oder false, je nach dem
ob der command erfolgreich ausgeführt wurde.

nein. Der Rückgabewert ist eine Zahl und nicht true oder false.

Nun reicht mir das nicht, denn ich möchte den Output lesen,
sprich, das was in dem cmd-prompt steht, ich weiss, wenn ich
cmd = „osql -E -S " & Worksheets(„Sheet3“).Range(„A“ &
i).Value & " -Q „„SELECT @@VERSION““ > C:\output.txt“ mit
> C:\output.txt ergänze, habe
ich den Output des cmd-Prompts in der Datei output.txt und
kann es über IO lesen!! Jedoch, kann man das nicht direkt mit
dem shell oder sonst wie durchführen, wäre um jeden Beitrag
dankbar.

Ich weiß nicht was „IO“ bedeutet noch habe ich eine osql.exe, osql.com o.ä.

Vom Prinzip her müßtest du es so coden:

Sub tt()
Dim Mache
Mache = Shell(„cmd /c dir c:\test > H:\dir.txt“, 6)
MsgBox Mache
End Sub

„dir“ ist ein eingebauter Befehl in command.com, oder cmd.exe inzwischen, egal, wäre „dir“ eine Datei in einem für Windows/Dos unbekannten Ordner dann so

Mache = Shell(„cmd /c d:\MeineProgramme\dir.exe c:\test > H:\dir.txt“, 6)

Gruß
Reinhard

Grüsse Sebastian

Hallo Reinhard.

Danke für deine Antwort.

nein. Der Rückgabewert ist eine Zahl und nicht true oder
false.

stimmt 1 oder 0, da hast du recht, gilt eh wie wahr oder falsch! :smile:

Nun reicht mir das nicht, denn ich möchte den Output lesen,
sprich, das was in dem cmd-prompt steht, ich weiss, wenn ich
cmd = „osql -E -S " & Worksheets(„Sheet3“).Range(„A“ &
i).Value & " -Q „„SELECT @@VERSION““ > C:\output.txt“ mit
> C:\output.txt ergänze, habe
ich den Output des cmd-Prompts in der Datei output.txt und
kann es über IO lesen!! Jedoch, kann man das nicht direkt mit
dem shell oder sonst wie durchführen, wäre um jeden Beitrag
dankbar.

Ich weiß nicht was „IO“ bedeutet noch habe ich eine osql.exe,
osql.com o.ä.

System IO, über Reader und Writer (womöglich jetzt die falschen Methoden, die kommen aus vb.net). osql.exe musst du nicht kennen. Ist so ein Tool zum Queries an einen SQL-Server zu senden.

Vom Prinzip her müßtest du es so coden:
Sub tt()
Dim Mache
Mache = Shell(„cmd /c dir c:\test > H:\dir.txt“, 6)
MsgBox Mache
End Sub

Wenn ich nun deine Sub ausführe bekomme ich als Ergebnis:
eine vierstellige Zahl, die ist aber je nach Aufruf verschieden, zB 8042, 4088, …!! Immer eine andere Zahl. Was mach ich mit dieser Zahl??
Ich möchte den Output erhalten, wie in der dir.txt als Beispiel:

 Datentr„ger in Laufwerk C: ist OSDisk
 Volumeseriennummer: E809-07FF

 Verzeichnis von c:\temp

05.08.2008 12:04 .
05.08.2008 12:04 ..
05.08.2008 11:57 934'246'400 en\_sql\_2005\_std\_x86\_dvd.iso
05.08.2008 12:01 296'210'432 en\_sql\_server\_2005\_sp2\_x86\_cd.iso
03.12.2008 08:48 16'498 getinfos.log
 3 Datei(en) 1'230'473'330 Bytes
 2 Verzeichnis(se), 10'027'397'120 Bytes frei

Gruss Sebastian

Hi,

[…]

Vom Prinzip her müßtest du es so coden:
Sub tt()
Dim Mache
Mache = Shell(„cmd /c dir c:\test > H:\dir.txt“, 6)
MsgBox Mache
End Sub

Wenn ich nun deine Sub ausführe bekomme ich als Ergebnis:
eine vierstellige Zahl, die ist aber je nach Aufruf
verschieden, zB 8042, 4088, …!! Immer eine andere Zahl. Was
mach ich mit dieser Zahl??

Diese Zahl ist die ID des Tasks, den Shell startet.
Das Problem ist, dass Shell die Anwendung nur startet und nicht abwartet, bis diese auch beendet wurde (asynchron eben).
Deshalb wird es schwer sein, die Ausgabe abzufangen.
mit der Task-ID und AppActivate kannst du immerhin der gestarteten Anwendung den Fokus geben, nur führt das noch immer nicht zum Ziel.

[…]

Auch wenn ich keine Lösung habe, hoffe ich wenigstens zur Aufklärung beigetragen zu haben.

Gruß Yelmalio

Hallo Sebastian,

nein. Der Rückgabewert ist eine Zahl und nicht true oder
false.

stimmt 1 oder 0, da hast du recht, gilt eh wie wahr oder
falsch! :smile:

immer noch nein :smile:
Das ist zwar richtig, gilt hier aber nicht unbedingt. Der Rückgabewert ist entweder 0 oder eine beliebige andere Zahl.

Ich weiß nicht was „IO“ bedeutet noch habe ich eine osql.exe,
osql.com o.ä.

System IO, über Reader und Writer (womöglich jetzt die
falschen Methoden, die kommen aus vb.net). osql.exe musst du
nicht kennen. Ist so ein Tool zum Queries an einen SQL-Server
zu senden.

Dann wäre vielleicht das Brett zu .Net oder SQL besser gewesen.

Wenn ich nun deine Sub ausführe bekomme ich als Ergebnis:
eine vierstellige Zahl, die ist aber je nach Aufruf
verschieden, zB 8042, 4088, …!! Immer eine andere Zahl. Was
mach ich mit dieser Zahl??

Äh, nix *gg*

Jedes programm was in Windows/Dos abläuft erhält ein handle, eine Nummer.
Mache mal den Affengriff, also Strg+Alt+Entf, alles was du da siehst hat ein handle.
Über das handle könntest du jeden der dort laufenden Prozesse „abschießen“

Was im Vba-Code angezeigt wird ist diese handle-Nummer, die dein Programm osql.exe hatte oder falls es noch liefe hat.
Der Rückgabewert ist 0 wenn es im Programmstart zu Fehlern kommt sodaß das programm nicht korrekt startet.
Korrekt im Sinne von Windows/Dos, was nicht bedeutet daß das Programm an sich korrekt funktioniert.

Ich möchte den Output erhalten, wie in der dir.txt als
Beispiel:

Das Pipe-Zeichen „>“ bedeutet für Windows/Dos daß alle Meldungen die ein Programm von sich aus ausgibt nicht am Bildschirm angezeigt werden sondern dort ausgegeben werden wohin das Pipe-Zeichen „>“ zielt.
Das kann wie im eispiel von „dir“ eine datei sein, aber auch der Drucker…

Wenn nun dein Programm osql.exe sowieso keine Ausgabe an den Bildschirm hat, kann man natürlich auch nix in eine Datei „umleiten“.

Was auch immer du auch an Informationen von dem Programm osql.exe haben willst, das geht nur übers Programm selbst, das auch nur wenn es dafür so programmiert wurde.

Gruß
Reinhard

Hallo Reinhard.

immer noch nein :smile:
Das ist zwar richtig, gilt hier aber nicht unbedingt. Der
Rückgabewert ist entweder 0 oder eine beliebige andere Zahl.

Oh ok, du hast recht, hab mich ein bisschen eingelesen!!! Hab mich da verlesen, dachte es Shell() as Boolean, ist aber Shell() as Double.
Der klügere liesst genauer nach!! Sry!!

Ich weiß nicht was „IO“ bedeutet noch habe ich eine osql.exe,
osql.com o.ä.

System IO, über Reader und Writer (womöglich jetzt die
falschen Methoden, die kommen aus vb.net). osql.exe musst du
nicht kennen. Ist so ein Tool zum Queries an einen SQL-Server
zu senden.

Dann wäre vielleicht das Brett zu .Net oder SQL besser
gewesen.

Nene ich brauchte diese Funktionen nur in VBA, habe sie aber schon gefunden. Deshalb, alles OK!!

Äh, nix *gg*
Jedes programm was in Windows/Dos abläuft erhält ein handle,
eine Nummer.
Mache mal den Affengriff, also Strg+Alt+Entf, alles was du da
siehst hat ein handle.
Über das handle könntest du jeden der dort laufenden Prozesse
„abschießen“

Ok cool, ProzessID verstehe, also, der Prozess wurde gestartet!!

Was im Vba-Code angezeigt wird ist diese handle-Nummer, die
dein Programm osql.exe hatte oder falls es noch liefe hat.
Der Rückgabewert ist 0 wenn es im Programmstart zu Fehlern
kommt sodaß das programm nicht korrekt startet.
Korrekt im Sinne von Windows/Dos, was nicht bedeutet daß das
Programm an sich korrekt funktioniert.

Verstehe, ich frag jetzt ab ob ProzessID (handleNummer) > 0 ist, dann passts!!!

Ich möchte den Output erhalten, wie in der dir.txt als
Beispiel:

Das Pipe-Zeichen „>“ bedeutet für Windows/Dos daß alle
Meldungen die ein Programm von sich aus ausgibt nicht am
Bildschirm angezeigt werden sondern dort ausgegeben werden
wohin das Pipe-Zeichen „>“ zielt.

Das ist mir klar!!
Wenn ich nun aber den Code ohne Pipe ausführe, bekomme ich über msgbox(Mache) auch nur die Prozess-ID zurück!!

Ich weiss, dass es mit .net möglich ist den Output der cmd.exe an vb.net weiterzugeben. in Vba bin ich echt ratlos, bis jetzt habe ich es nur über > datei.txt und datei.txt wieder einlesen geschafft, ist eine Lösung, aber warum 1000 Dateien erzeugen, wenn zB vb.net das selbst handhabt!!

Wenn nun dein Programm osql.exe sowieso keine Ausgabe an den
Bildschirm hat, kann man natürlich auch nix in eine Datei
„umleiten“.
Was auch immer du auch an Informationen von dem Programm
osql.exe haben willst, das geht nur übers Programm selbst, das
auch nur wenn es dafür so programmiert wurde.

Die osql.exe hat einen Output an den Bildschirm!!

Gruss Sebastian

Hallo Sebastian,

Jedes programm was in Windows/Dos abläuft erhält ein handle,
eine Nummer.
Mache mal den Affengriff, also Strg+Alt+Entf, alles was du da
siehst hat ein handle.
Über das handle könntest du jeden der dort laufenden Prozesse
„abschießen“

Ok cool, ProzessID verstehe, also, der Prozess wurde
gestartet!!

Was im Vba-Code angezeigt wird ist diese handle-Nummer, die
dein Programm osql.exe hatte oder falls es noch liefe hat.
Der Rückgabewert ist 0 wenn es im Programmstart zu Fehlern
kommt sodaß das programm nicht korrekt startet.
Korrekt im Sinne von Windows/Dos, was nicht bedeutet daß das
Programm an sich korrekt funktioniert.

Verstehe, ich frag jetzt ab ob ProzessID (handleNummer) > 0
ist, dann passts!!!

Ähem, alles was ich schrieb ist angeeignetes Halbwissen, vielleicht wird auch ein Minuswert zurückgeliefert oder ein Emptywert, also kein Wert wenn da was schiefläuft.

Und das was man in dem Taskmanager sieht sind nicht alle Prozesse die gerade aktiv sind *glaub*
Jedenfalls habe/hatte ich mal Vba-Code der alle prozesse samt Hnadle u.v.m. auflistet, das waren weit mehr als im Taskmanager angezeigt werden.
Manche hatten sogar die gleichen handle-Nummern *glaub*, das sind dann „Kinder“ (Childs) des einen Prozesses.
Um ehrlich zu sein, mit den ganzen Angaben die da aufgelistet wurden konnte ich nicht allzuviel anfangen :smile:)

Ich möchte den Output erhalten, wie in der dir.txt als
Beispiel:

Wenn ich nun aber den Code ohne Pipe ausführe, bekomme ich
über msgbox(Mache) auch nur die Prozess-ID zurück!!

ja.

Ich weiss, dass es mit .net möglich ist den Output der cmd.exe
an vb.net weiterzugeben. in Vba bin ich echt ratlos, bis jetzt
habe ich es nur über > datei.txt und datei.txt wieder
einlesen geschafft, ist eine Lösung, aber warum 1000 Dateien
erzeugen, wenn zB vb.net das selbst handhabt!!

Dann mache das doch mit .Net und lasse das in eine Textdatei schreiben.
Die kann man dann mit VBa auslesen.
.Net habe ich nicht, kann ich nicht und will ich grad auch nicht,ich habe schon genug zu tun erste Schritte in VB5.0 und makros für Open Office zu machen.
Wobei mir mein Vba in VB5 schon sehr hilft, in OpenOffice aber kaum, völlig andre Welt dort.

Wenn nun dein Programm osql.exe sowieso keine Ausgabe an den
Bildschirm hat, kann man natürlich auch nix in eine Datei
„umleiten“.
Was auch immer du auch an Informationen von dem Programm
osql.exe haben willst, das geht nur übers Programm selbst, das
auch nur wenn es dafür so programmiert wurde.

Die osql.exe hat einen Output an den Bildschirm!!

Dann bin ich ratlos.
Anscheinend nutzt dann das Pipe-Zeichen „>“ aus Dos-zeiten nix mehr.

Ich kenne .Net nicht, grundsätzlich könnte man, wenn überhaupt mittels API diese osql.exe starten und dann auch über API-Funktionen eventuelle Bildschirmausgaben „abfangen“ und speichern.

API-Aufrufe kann man in Vb, Vba, C, usw. machen, es sind die gleichen APIs.

Aber es gibt mittlerweile zigtausende von API Funktionen. Stell dir das so vor als wenn das alles Zusatzfunktionen in Vba sind.
Um ie zu benutzen, egal in VB,Vba, C muß man nur den namen der API-Funktion kennen und die parameter die die Funktion braucht.
Dann sind sie genausoeinfach einzubauen wie z.B. Sverweis als Formel in Excel.

Da brauchst du ja auch nur zu wissen daß es Sverweis gibt, was es macht und welche vier Parameter es erwartet.

Jetzt müßte man also nur einen oder mehrere APIfunktionen mit Namen kenne, plus deren parametern, um dann mittels einer API-Funktion dein programmzu starten,dann das handle ermitteln, dann die Bildschirmausgabe „abfangen“.

Das ist schnell programmiert in Vba, allerdings nur dann wenn man die Namen der APIs kennt und es überhaupt APIs gibt die das leisten können.

Das Starten eines programmes und die handle ermittlung ist kein Thema, das kriege ich auch hin, Problem ist die „Abfangung“ der Bildschirmausgabe.

Tipp, frage im .Net-Brett nach oder im VB-Brett. Oder auch im C-Brett.
Denk dran, Multiposting wird gelöscht.

Wenn dir der Begriff API fremd ist, so ist das egal :smile:
Hier mal ein Beispiel wie es grundsätzlich immer mit APIs abläuft:
Angenommen du willst ein Makro haben was exakt 100 Millisekunden stoppt und dann erst was macht, das kriegst du mit Vba nicht hin, nur mit der API_Funktion Sleep, die asl einzigen Parameter die Wartezeit in Millisekunden erwartet.
Der Code sieht dann so aus:

In einem Standardmdul:

Private Declare Sub Sleep Lib „kernel32“ (ByVal dwMilliseconds As Long)
Sub Test()
Sleep 100
’ weiterer Code
End Sub

Du siehst, APIs zu benutzen ist kinderleicht, Problem ist herauszufinden welche es gibt.

Sorry, konkret helfen konnte ich dir nicht, aber vielleicht halfen dir meine Ausführungen ein wenig weiter.

Falls du an APIs interessiert bist, kaufe dir das Buch Users Guide to API oder wie immer das genau heißt, geschrieben hat es Dan Appleman, der weltweite Guru für APIs.
Leider gibt es das nicht auf Deutsch *fluch*

Gruß
Reinhard

Hallo zusammen,

Also ich verstehe die Diskussion irgendwie net…
Ich denke Du hast via Pipe eine Datei mit der Ausgabe Deines SQL-Programmes - die kannst Du lesen aud auswerten. Was ist eigentlich das Problem dabei, Sebastian? Was willst DU eigentlich erreichen?

Es bliebe die Frage zu stellen, warum Du ein Fremdprogramm zum Abfragen anstellst und nicht direkt via ADO/DAO an die Datenbank herangehst?

OT Makros in Open Office
Hallo Hans,

ich kann wie du ein wenig Vba *gg*, aber in OO scheitere ich.

Bei aufgezeichneten (oder habe ich den selbst geschrieben, weiß grad nicht) Code wie diesem:

function Datedif(Zeitintervall,Ausgangsdatum,Enddatum)
Dim nutzer as Object
Dim reg_daten as Object
Dim profil(0) as new com.sun.star.beans.PropertyValue
nutzer = createUnoService(„com.sun.star.configuration.ConfigurationProvider“)
profil(0).Name = „nodepath“
profil(0).Value = „org.openoffice.UserProfile/Data“
reg_daten = nutzer.createInstanceWithArguments(„com.sun.star.configuration.ConfigurationAccess“, profil())
Datedif=datediff(Zeitintervall,Ausgangsdatum,Enddatum)
end function

habe ich Null Plan wie ich den modifizieren kann.
Ich habe zwar null Ahnung von C, aber einfachen Code für C kann ich einigermaßen kapieren.
Bei OO ist das anders, dieses „com.sun.star“ geht mir schwer auf den Keks.
Ja, ich habe die Hilfe in OO durchpflügt.
Und nein, verstanden habe ich nix :frowning:

jetzt meine Frage, kennst du Webseiten wo mir das erklärt wird mit dem „com.sun.star“ usw.
Und mit Beanshell, Python.
Fragen zu Javasript werden wohl im javasript-Brett beantwortet.

Gruß
Reinhard

Hallo Reinhard,

Wieso sind wir plötzluch bei Starbasic?

ich kann wie du ein wenig Vba *gg*, aber in OO scheitere ich.
-)

Bei aufgezeichneten (oder habe ich den selbst geschrieben,
weiß grad nicht) Code wie diesem:

function Datedif(Zeitintervall,Ausgangsdatum,Enddatum)
Dim nutzer as Object
Dim reg_daten as Object
Dim profil(0) as new com.sun.star.beans.PropertyValue
nutzer =
createUnoService(„com.sun.star.configuration.ConfigurationProvider“)
profil(0).Name = „nodepath“
profil(0).Value = „org.openoffice.UserProfile/Data“
reg_daten =
nutzer.createInstanceWithArguments(„com.sun.star.configuration.ConfigurationAccess“,
profil())
Datedif=datediff(Zeitintervall,Ausgangsdatum,Enddatum)
end function

habe ich Null Plan wie ich den modifizieren kann.

Wie modifizieren? Aufzeichnungen in OO laufen über den Dispatcher, sehen ganz anders aus.
Das ist ziemlich zusammenhangloser Code. Du liest die, in VBA würde ich sagen, BuiltInDocumentProperties aus, machst aber nix mit den Daten um dann plötzlich ein DateDiff anzusetzen.

Ich habe zwar null Ahnung von C, aber einfachen Code für C
kann ich einigermaßen kapieren.
Bei OO ist das anders, dieses „com.sun.star“ geht mir schwer
auf den Keks.

Das ist der Objektpfad com.sub.star würde ich in VBA mit Application übersetzen.

Ja, ich habe die Hilfe in OO durchpflügt.
Und nein, verstanden habe ich nix :frowning:

jetzt meine Frage, kennst du Webseiten wo mir das erklärt wird
mit dem „com.sun.star“ usw.

Grundsätzlich ist das Objektmodell von OO wesentlich komplexer als VBA. In VBA gibt es eine Klasse, aus der ein Objekt instanziert wird und das hat Eigenschaften, Methoden und ggf. Ereignisse.

Vereinfacht: In OO wird ein Objekt aus verschiedenen Klassen, die heissen hier Services, gebildet. Ein und dasselbe Objekt kann also ganz verschieden aufgebaut sein, je nach dem in welchem Kontext es instanziert wird. Ich durchsteige das OO Konzept auch nicht und muss immer wieder nachfragen, um irgend einen Objektpfad aufzudröseln. Die Dokumentation ist eigentlich nur für Entwickler verständlich, sich so nebenher mal schnell was reinzuziehen ist seeehr aufwändig. Aber kommt Zeit kommt Rat. Da es kein Code-Completion wie in VBA gibt/geben kann. Arbeite ich hauptsächlich mit einem Add-on Code-Inspector: das läuft aber von hinten durch die Brust in Auge. Du startest den Code und kannst dann den Objektbaum aufdröseln und den COde zu einem Objekt auslesen und in den COde enbauen.
Die wichtigste Quelle ist Andrew Pitonyak

http://www.pitonyak.org/oo.php
http://book.opensourceproject.org.cn/officeeditor/of…

und die Foren
http://de.openoffice.info
http://www.oooforum.org/

Ich glaub allerdings nicht, dass Freizeit Programmierer wie wir sich einen umfassenden Objektstrukturüberblick in OO erarbeiten können, wie das in der flachen VBA-Hierarchie doch ganz gut möglich ist…

Hallo Hans,

danke dir für die Erklärungen.

Die Links schaue ich mir garantiert an.

Gruß
Reinhard

http://www.pitonyak.org/oo.php

Hallo Hans,

der Link ist Klasse, habe mir gleich die AndrewMakro.odt heruntergeladen, Super.

Danke dir
Gruß
Reinhard

Hi Hans.

Also ich verstehe die Diskussion irgendwie net…
Ich denke Du hast via Pipe eine Datei mit der Ausgabe Deines
SQL-Programmes - die kannst Du lesen aud auswerten. Was ist
eigentlich das Problem dabei, Sebastian? Was willst DU
eigentlich erreichen?

Wie gesagt, ich hab die Lösung, ich lese die Datei einfach via VBA wieder ein. Jedoch, warum Dateien schreiben und lesen, wenn es vielleicht möglich wäre, den Output der cmd direkt an VBA zu übergeben.

Es bliebe die Frage zu stellen, warum Du ein Fremdprogramm zum
Abfragen anstellst und nicht direkt via ADO/DAO an die
Datenbank herangehst?

Ok zur Erklärung, hier gehts um das Auslesen der Edition von Sql-Servern. Die osql.exe ist eine exe, wo Microsoft zur Verfügung stellt.
Mir ist das alles klar das ADO/DAO Daten aus der Datenbank holen kann.

Jedoch ich brauche dieses osql.exe, denn MS garantiert, dass diese exe auf jedem Rechner installiert ist, wo ein SQL-Server läuft, egal ob Express, Enterprise, Standard oder MSDE.

Deshalb, ich möchte eigentlich nur erreichen, dass ich mittels VBA Zeilen, die das cmd liefert, an VBA / Excel übergeben wird.

Danke und Gruß Sebastian

ps. Das Problem wurde mit erstellen und lesen von Dateien gelöst, jedoch nicht, so wie ich es zuerst gedacht habe, im Moment gehe davon aus, dass VBA keine cmd-Output-Zeilen lesen kann.

Hi

Deshalb, ich möchte eigentlich nur erreichen, dass ich mittels
VBA Zeilen, die das cmd liefert, an VBA / Excel übergeben
wird.

Ah, ja…
Dann musst Du mal sowas wie ‚vb pipe screen output‘ googeln z.B.
http://www.vbcode.com/asp/showsn.asp?theID=13195
vielleicht ist da was dabei. Nach meiner Einschätzung ist es aber sicherer und einfacher die Ausgabe in eine Datei zu stecken und die dann auswerten. Schon deshalb, weil du ganz einfach solange warten kannst/musst, bis die Datei fertig angelegt wurde…
Naja, guckst Du und es wäre nett, wenn Du was rauslassen würdest ob oder ob nicht :wink:

Gruß HW