2013-07-30 5 views
31

У меня есть фиксированная команда, которую мне нужно передать в командную строку с помощью VBA, а затем выполнить команду. , например. «perl a.pl c: \ temp»Выполнение команды в командной строке с использованием excel VBA

следующая команда, которую я пытаюсь использовать, но она просто открывает командную строку и не запускает команду.

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

Пожалуйста, проверьте.

+2

вы не на самом деле даже нужно сначала открыть cmd.exe -> Shell() может передать ваши perl args прямо на perl.exe –

ответ

42

Параметр S ничего не делает сам по себе.

/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 

Попробуйте что-то вроде этого вместо

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

Вы можете даже не нужно добавлять «cmd.exe» в этой команде, если вы не хотите, чтобы окно командной строки, чтобы открыть, когда это выполняется. Shell должна выполнить команду самостоятельно.

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



-Edit-
Ждать команду, чтобы закончить вам придется сделать что-то вроде @Nate Хекман показывает в своем ответе 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

Имейте в виду, что оболочка вернется после запуска процесса. Он не будет ждать завершения вашего Perl-Script, просто говоря. – AKDADEVIL

+0

Большое спасибо. это прекрасно работает. Каким будет код, чтобы «дождаться завершения моего Perl-Script»? – user1699227

+0

Я думаю, что нужно было бы сделать что-то вроде [этого] (http://stackoverflow.com/questions/15951837/excel-vba-wait-for-shell-command-to-complete) – Ripster