Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1456to1460
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable aus Makro an Batch übergeben

Variable aus Makro an Batch übergeben
08.11.2015 18:10:09
Saskia
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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

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

AW: Variable aus Makro an Batch übergeben
08.11.2015 18:23:57
Saskia
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.

Variable aus Batch an Makro übergeben
08.11.2015 19:22:30
Saskia
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

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

Anzeige
Variante
09.11.2015 17:30:39
Michael
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

Anzeige
AW: Variante
10.11.2015 20:40:58
Saskia
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

Anzeige
AW: Variante
11.11.2015 00:09:21
Michael
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

AW: Variante
11.11.2015 19:06:05
Saskia
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

Anzeige
nein, nein,
11.11.2015 20:21:45
Michael
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

AW: Variante
11.11.2015 20:18:22
Saskia
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige