Variable aus Makro an Batch übergeben

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Variable aus Makro an Batch übergeben
von: Saskia
Geschrieben am: 08.11.2015 18:10:09

Guten Abend,
ich habe folgendes Problem.
Ich möchte mit einem Makro eine Batch-Datei öffnen lassen und eine Variable mit geben. Die Batch-Datei funktioniert einwandfrei und das Makro öffnet diese auch. Nur die Variable kommt einfach nicht mit. Ich habe die Variable so definiert:
Dim variable
variable = Range("A2").Value
da sie den Wert aus Zelle A2 übernehmen soll. Der Befehl zum aufrufen der Batch-Datei ist:
batch = Shell("C:\Users\Saskia\Desktop\Test.bat variable", 1)
Wenn sich die Datei dann öffnet kommt aber nicht der Wert aus A2 an sondern variable.
Kann mir da jemand weiter helfen?
Liebe Grüße
Saskia

Bild

Betrifft: AW: Variable aus Makro an Batch übergeben
von: Nepumuk
Geschrieben am: 08.11.2015 18:16:52
Hallo,
so besser?
batch = Shell("C:\Users\Saskia\Desktop\Test.bat " & variable, 1)
Gruß
Nepumuk

Bild

Betrifft: AW: Variable aus Makro an Batch übergeben
von: Saskia
Geschrieben am: 08.11.2015 18:23:57
Danke du bist mein Held :)
Ich habe jetzt den halben Morgen damit verbracht und nichts gefunden obwohl es doch scheinbar so leicht und offensichtlich ist.
Vielen Dank.

Bild

Betrifft: Variable aus Batch an Makro übergeben
von: Saskia
Geschrieben am: 08.11.2015 19:22:30
Jetzt hab ich aber noch eine Frage.
Geht das ganze auch anders herum? Also das ich eine Variable die in der Batch-Datei entstanden ist an Excel übertragen kann?
MfG
Saskia

Bild

Betrifft: AW: Variable aus Batch an Makro übergeben
von: Nepumuk
Geschrieben am: 08.11.2015 19:47:09
Hallo,
erstell eine Textdatei mit dem Inhalt der Variablen die kannst du dann in Excel auslesen.
Gruß
Nepumuk

Bild

Betrifft: Variante
von: Michael
Geschrieben am: 09.11.2015 17:30:39
Hi zusammen,
Shell kann nur Programme aufrufen, mit einem Umweg über WScript kann man auch in STDOUT geschriebene Ausgaben von Programmen auslesen.
Teste mal:

Option Explicit
Sub BatchLesen()
  Dim oData As Variant
  Dim objShell As Object, objExec As Object
  Dim ausgabe As String
  ausgabe = "Parameter1"
  Set objShell = CreateObject("WScript.Shell")
' batchtest.bat sieht so aus:
' @echo wert=bla
' @echo %1
' Ende batchtest.bat
  Set objExec = objShell.Exec("C:\A_Herber\batchtest.Bat " & ausgabe)
  
  Do While Not objExec.StdOut.AtEndOfStream
    ausgabe = Trim(LTrim(objExec.StdOut.ReadLine))
    'If Mid(ausgabe, 1, 4) = "wert" Then
    MsgBox ausgabe
  Loop
  Set objShell = Nothing
End Sub
Schöne Grüße,
Michael

Bild

Betrifft: AW: Variante
von: Saskia
Geschrieben am: 10.11.2015 20:40:58
Also das mit dem txt File hat eigentlich gut funktioniert. Mein Batch läuft auch einwandfrei. Nur das Makro macht mir weiterhin Probleme. Wenn ich die Batch Datei aufrufe, wird diese ausgeführt und erstellt die ergebnis.txt wie sie das sollte. Wenn ich dann einen Schritt weiter aus diesem txt File lese, kommt allerdings, dass die Datei nicht exisitert obwohl sie ja da ist. Wenn ich das Makro dann noch mal ausführe funktioniert es dann. Allerdings nimmt es dann nicht die aktuell erstellte Version der ergebnis.txt sondern die davorige, obwohl der Inhalt im ergebnis.txt überschrieben wird beim erneuten ausführen. Ich hoffe das ist irgendwie verständlich. Hier mal der Code:
variable = Range("A2").Value
batchPfad = "C:\Users\Saskia\Desktop\Test.bat"
ergebnisPfad = "C:\Users\Saskia\Desktop\Ergebnis.txt"
zaehler = 0
'Batch starten mit Variable aus Feld A2
batch = Shell(batchPfad & " " & variable, 1)
'Zeilen aus txt lesen
Open ergebnisPfad For Input As #1
Do While Not EOF(1)
Line Input #1, temp
Sheets(1).Cells(2 + zaehler, 2) = Replace(temp, vbTab, " ")
zaehler = zaehler + 1
Loop
Close #1
variable = Null
temp = Null

Bild

Betrifft: AW: Variante
von: Michael
Geschrieben am: 11.11.2015 00:09:21
Hi Saskia,
Excel-Hilfe zu "Shell": arbeitet asynchron, d.h., wenn der Prozeß nach Excel zurückkehrt, bevor die Datei geschrieben ist, ist sie eben noch nicht da.
Nimm WSript.Shell wie im Beispiel, dann ist die Textdatei überflüssig, oder, wenn es Dir lieber ist, recherchiere die WScript-Optionen, da kannst Du explizit warten, bis der Prozeß fertig ist.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Variante
von: Saskia
Geschrieben am: 11.11.2015 19:06:05
Hallo Michael,
wenn ich das richtig verstanden habe, kann ich den Befehl nicht im Excel Makro ausführen lassen sondern über eine .vbs, oder? Ich hab ja versucht den WScript Befehl zu verstehen, tatsächlich entzieht sich das Thema aber scheinbar total meiner Auffassungsgabe.
Geht es nicht auch so, dass ich eine Pause nach der Batch-Ausführung einbauen kann, dass hier kurz gewartet wird, und die .txt dann da ist, wenn das Makro weiter arbeitet oder gibt es da wirklich keinerlei Chance?
Liebe Grüße
Saskia

Bild

Betrifft: nein, nein,
von: Michael
Geschrieben am: 11.11.2015 20:21:45
Saskia,
ich hatte Dir doch das Beispiel oben gepostet, das ist ganz normaler VBA-Code in Excel, den Du auch zeilenweise zum Anschauen mal mit der F8-Taste durchgehen kannst.
Du mußt es nur ausprobieren (und halt Deine Pfade ändern).
Ich muß jetzt weg von der Kiste, aber evtl. wäre es ja auch ganz nett, wenn Du uns mal kurz schilderst, was die Batch-Datei eigentlich macht: vielleicht gibt es ja hier schon eine Möglichkeit, etwas zu vereinfachen.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Variante
von: Saskia
Geschrieben am: 11.11.2015 20:18:22
Ich habe es jetzt so lösen können:
'Warten bis txt erstellt ist
Set fs = CreateObject("Scripting.FileSystemObject")
Do While fs.Fileexists(ergebnisPfad) = False
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
Loop
Trotzdem allen vielen Dank für die tollen Lösungen. Ohne eure Hilfe wäre das nichts mehr geworden.
Liebe Grüße
Saskia

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Variable aus Makro an Batch übergeben"