VisualBasic Aufruf via VBA Script führt .bat nicht richtig aus

Phantro

Lt. Junior Grade
Registriert
Apr. 2008
Beiträge
442
Hallo Leute,

habe aktuell ein kleines, doofes Problemchen. Leider seh ich auch keine Logik hierbei und finde auch keine Lösung im Netz.

Ich habe in Excel ein Makro erstellt, welches mir eine externe Batch Datei ausführen soll.
Die Batchdatei funktioniert auch, wenn ich diese direkt im Ordner ausführe.
Nutze ich mein VBA Script zum ausführen der Datei, dann gibts Fehlermeldungen von wegen Datei bereits vorhanden oder nicht gefunden (obwohl sie physisch im Ordner sichtbar ist) etc.

Der VBA Code:

Dim sh
Set sh = CreateObject("Shell.application")
sh.Open "C:\Dokumente und Einstellungen\***\Desktop\***\test.bat"

-> Mit "Shell ("explorer.exe PFAD")" erhalte ich eine Sicherheitsabfrage von Windoof XP ob die Datei wirkich ausgeführt werden soll. Daher habe ich die andere Variante gefunden und verwendet.

Was macht die Batchfile? CSV-Dateien von Ordner A nach B verschieben, alles in "ALLE.csv" zusammenkopieren, die Quelldateien in Ordner C weiterverschieben und die neu erstellte ALLE.csv starten.
Danach soll via VBA Script nach x Sekunden Wartezeit in der ALLE.csv ein weiteres Makro losjagen.



Was mich halt wundert: Führe ich die Batchdatei manuell aus, klappt alles. Wirds über VBA angestartet gehts schief. Hat von euch jemand einen Rat? Liegts an der Art wie ich die Datei aufrufe? Gibts noch einen anderen Weg? Verzweifel da langsam noch daran =(
 
Das klingt auch nicht schlecht, werde ich morgen früh gleich ausprobieren, danke :-)
Bin aktuell mehr oder weniger in der Lernphase, was VBA und Batch angeht. Bissl was bekomm ich schon hin aber an der Sache verzweifel ich noch. Werde mich melden, wenns klappt :-)


Edit:
Also ich habe das gerade mal getestet, in dem ich deinen gefunden Code verwenden und "file.bat" durch "pfadname\test.bat" ersetzt. Wenn ich das Makro nun mit F8 Stück für Stück durchlaufe, dann liest er den Befehl, meckert aber nicht rum, das etwas nicht klappen würde. Allerdings führt er die .bat-Datei nicht aus. Es passiert einfach nichts... =(
 
Zuletzt bearbeitet:
Benenne das Batchfile mal in .cmd um und ändere das Script entsprechend ab. Laufen muss es, bei mir tuts so einwandfrei.
 
Hallo Alex,

leider klappt das auch nicht :-(
Mit dem Shell ("explorer.exe pfad\test.cmd") erhalte ich wieder diese Windowsmeldung von wegen Dateidownload aus dem Internet ob ich die speichern oder ausführen möchte. Mit meinem Code wird die Datei wieder fehlerhaft ausgeführt.
Mit dem Code von Browny passiert weiterhin einfach nichts =(

Edit:
Achja: Ohne den Teil "explorer.exe" erhalte ich eine Fehlermeldung wegen ungültigem Aufruf
 
Zuletzt bearbeitet:
Die Zeile CreateObject("WScript.Shell").Run "d:\dokumente\scripte\trim.cmd" führt mir Trim.cmd einwandfrei aus. Das "Explorer.exe" ist überflüssig und für "Pfad" muss natürlich der richtige Pfad zum Batchfile eingesetzt werden.
 
Hmm... Also meine angepasste Variante wäre dann nun (habe den Code copy&paste eingefügt und nur den Pfad angepasst)

CreateObject("WScript.Shell").Run "C:\Dokumente und Einstellungen\***\Desktop\test\test.cmd"

*** = ist nur eine kleine Zensur. Habe den Pfad direkt aus dem Explorer kopiert, daher sind Rechtschreibfehler ausgeschlossen.
Fazit bleibt leider das gleiche: Es tut sich nichts =( Kommt diese WScript.Shell-Variante evtl. nicht mit den Leerzeichen im Pfad klar? Dachte, das sollte durch die "" geklärt sein? Mit dem Shell ("explorer.exe bla") klappts trotz Leerzeichen ebenso wie bei der Shell.application Variante. Nur die WScript.Shell funzt nicht :-(

Seh ich den Wald vor lauter Bäumen nicht?

PS: Schöne Grüße aus Mannheim ;-)
 
Zuletzt bearbeitet:
Probiers doch mal ausserhalb des Desktopordners - also Script und Batch in einen Ordner verschieben, der nicht im Benutzerprofil liegt. Gehts dann? Ist der Scripting Host auch aktviert?
 
Hab das Ganze auf C verschoben, dann würde es klappen mit dem Aufruf. Allerdings auch dann läuft die Batch nicht sauber durch sondern resultiert in Fehlermeldungen. Mit normalem Doppelklick geht alles einwandfrei. Ich verstehs nicht :(
 
Selbige wie eingangs beschrieben. Er erstellt zwar die ALLE.csv, kopiert die Daten aber nicht zusammen (die Qulledateien werden aber alle sauber in den Ordner kopiert, in der danach eben die ALLE-csv befüllt werden soll) und wenn er sie starten soll findet er die Datei auch nicht, obwohl im Ordner vorhanden (zwar leer, aber vorhanden).

Wie gesagt: Doppelklick auf die Batch-Datei und alles geht reibungslos durch und passt alles. Nur mit dem VBA fängt der an zu spinnen.
 
Wo liegen die .csv Dateien? Der Scripting Host mag nicht in Profilordnern arbeiten, wie wir schon festgestellt haben. Wenn die Dateien ebenfalls in einem Profilordner liegen, dann läge es nahe, wenn man die ebenfalls ausserhalb bearbeitet.
 
Quelldateien: C:\test\test\
werden kopiert nach C:\test\ -> klappt
Alle.csv wird erstellt in C:\test\ -> klappt
csv werden in alle.csv kopiert -> alle.csv wird nicht gefunden
1.csv, 2.csv etc. werden nach C:\test\ablage kopiert -> nein, ordner wird nicht gefunden obwohl vorhanden
start der alle.csv -> klappt nicht weil angeblich nicht vorhanden
 
Zuletzt bearbeitet:
move "%source_path%test\*.csv" "%source_path%"
echo. > ALLE.csv
for %%a in (sort "*.csv") DO copy /b ALLE.csv+"%%a" ALLE.csv
move /y ALLE.csv "%source_path%temp" => temp ist auch vorhanden
move /y *.csv "%source_path%ablage"
move /y "%source_path%temp\ALLE.csv" "%source_path%"
start "blubb" "ALLE.csv"


edit:
set source_path=%~dp0 => Ist eingangs noch gesetzt. Somit ist es praktisch egal wo die Datei liegt, sie funktioniert, wenn die Unterordner entsprechend angelegt sind.


Edit2:
Mittlerweile funktioniert soweit fast alles. Nur kommt die Ausführung über VBA leider nicht mit dem %%a zurecht. Das wird irgendwie gekonnt übergangen :-( Scheint nur beim manuellen ausführen zu gehen. Gibts hierfür ein Workaround?
 
Zuletzt bearbeitet:
Zurück
Oben