3

Excel スプレッドシートから取得した引数を使用して特定のシェル プログラムを実行する VBA スクリプトを実行しようとしています。

spredsheet の n 行に対してコマンドを n 回実行したいのですが、すべてを 1 つの cmd.exe ウィンドウで実行します。それは達成可能ですか?

私はそのような手順を実行しています:

1.シェルオブジェクトの作成:

Set wsh = VBA.CreateObject("WScript.Shell")

2.スプレッドシートのすべての行を繰り返し処理し、それぞれを呼び出します。

wsh.Run("Command with row specific args", 1, true)

その結果、処理された n 行に対して n 個のコンソール ウィンドウが開かれました。それを回避する方法はありますか?

助けていただければ幸いです。

4

1 に答える 1

3

詳細は説明しませんが、必要なすべてのパラメーターを含むバッチ (.bat) ファイル (他のテキスト ファイルへの書き込みと同じ) を作成し、どこかに保存してから、単一のファイルで実行することで解決できます。 cmd.exe を呼び出します。そして、そのファイルを削除するだけです。


出力用のファイルを開くことから始めます。

Dim fn As Long
fn = FreeFile
Open "filename.bat" For Output As #fn

次に、範囲を繰り返し、それぞれに対して cmd.exe を起動する代わりに、開いているファイルに書き込みます。

Print #fn "command with row specific args"

次に、ファイルを閉じて実行します。

Close #fn
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run("filename.bat", 1, true)

次に、ファイルを破棄できます。

Kill "filename.bat"
于 2013-10-03T22:16:56.523 に答える