2013-07-30 20 views
31

Mam stałe polecenie, które należy przekazać do wiersza polecenia przy użyciu VBA, a następnie polecenie powinno zostać uruchomione. np. "perl a.pl c: \ temp"Wykonaj polecenie w wierszu polecenia za pomocą programu excel VBA

Poniżej znajduje się polecenie, którego próbuję użyć, ale po prostu otwiera wiersz polecenia i nie uruchamia polecenia.

Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)

proszę sprawdzić.

+2

nie robić tak naprawdę trzeba najpierw otworzyć cmd.exe -> Shell() może przekazać twoje argumenty perl prosto do perl.exe –

Odpowiedz

42

Parametr S nic nie robi samodzielnie.

/S  Modifies the treatment of string after /C or /K (see below) 
/C  Carries out the command specified by string and then terminates 
/K  Carries out the command specified by string but remains 

Spróbuj coś jak ten zamiast

Call Shell("cmd.exe /S /K" & "perl a.pl c:\temp", vbNormalFocus) 

Nie może nawet trzeba dodać „cmd.exe” do tego polecenia, chyba że chcesz się okno polecenia, aby otworzyć się, gdy ten jest prowadzony. Powłoka powinna wykonać polecenie samodzielnie.

Shell("perl a.pl c:\temp") 



-Edit-
czekać na polecenia, aby zakończyć trzeba będzie coś zrobić jak @Nate Hekman pokazuje w swojej odpowiedzi here

Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 

wsh.Run "cmd.exe /S /C perl a.pl c:\temp", windowStyle, waitOnReturn 
+5

Pamiętaj, że powłoka powróci po uruchomieniu procesu. Nie będzie czekać, aż skończy się Perl-Script, po prostu mówiąc. – AKDADEVIL

+0

Wielkie dzięki. to działa dobrze. Jaki byłby kod "czekać na zakończenie mojego Perl-Script"? – user1699227

+0

Myślę, że musiałbym zrobić coś w stylu [this] (http://stackoverflow.com/questions/15951837/excel-vba-wait-for-shell-command-to-complete) – Ripster

Powiązane problemy