2013-07-30 70 views
31

VBAを使用してコマンドプロンプトに渡す必要のある固定コマンドがあり、コマンドを実行する必要があります。例: "perl a.pl c:\ temp"excel VBAを使用してコマンドプロンプトでコマンドを実行

以下は私が使用しようとしているコマンドですが、コマンドプロンプトを開き、コマンドを実行しません。

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

ご確認ください。

+2

彼の答えに示したように


-Edit-

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

は、あなたが何かをする必要があります終了するコマンドを待つために、実際にはcmd.exeを開く必要があります。 - > Shell()はperl.exeに直接perlのargsを渡すことができます –

答えて

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 

あなたも、あなたはこれが実行されたときに、コマンドウィンドウを開きたい場合を除き、このコマンドに「cmd.exeの」を追加する必要はないかもしれない代わりに

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

をこのような何かを試してみてください。シェルは、コマンドを単独で実行する必要があります。 @Nate Hekmanはあなたがいない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

関連する問題