2

コマンド ライン プログラムの実行にも使用する Excel マクロがあります。そのマクロでは、さまざまなファイルパス、ファイル名などのいくつかのパラメーターを設定しました。これを (おそらく) Windows バッチファイルに入れたいので、私 (またはユーザー) はマクロに触れる必要はありませんが、その .bat 制御ファイルのファイルパスを変更し、それに応じてマクロの値を変更します。

どうすればそのようなタスクを達成できますか? たぶん、あなたが私に指摘できる例がそこにあるでしょう。

ありがとうございました。

4

2 に答える 2

3

Excel では、コマンドラインからワークブックにパラメーターを渡すための標準的な文書化された方法は提供されていません。

ただし、文書化されていない、トリッキーで、やや制限された方法があります。Excel の/eパラメータの悪用。

BATファイルで、この方法でExcelを呼び出します

 start excel "workbook.xls" /e/oneparm/anotherparm/yetanotherparm

次に、workbook.xls ファイルで、関数を使用してコマンドラインにアクセスします。

 Declare Function GetCommandLineA Lib "Kernel32" () As String

そして、それを解析するだけです...

 Private Sub Workbook_Open()
   ...
   commandline = GetCommandLineA
   ...
   epos = Search("/e", commandline, 1) + 1
   p1pos = Search("/", commandline, epos) + 1 
   onearg = Mid(commandline, epos, p1pos-epos)

   p2pos = Search("/", commandline, p1pos)
   anotherarg = Mid(commandline, p1pos, p2pos-p1pos)
   ...

このメソッドは非常に制限されていることに注意してください。パラメーターに空白、スラッシュ、アンパサンド、キャレット、またはその他の予約文字がある場合は機能しません。この制限を克服するには、パラメーターにエンコード方法を実装する必要があります。そのような場合、私は通常urlencodingを使用しますが、他のトリック (空白をアンダースコアまたはプラス記号に置き換える) を使用します。決定はあなた次第です。

于 2012-06-08T09:21:33.060 に答える
2

バッチ ファイルからの最も簡単な方法は、いくつかの環境変数を設定することです。それらは、プロセスの作成時に Excel に継承されます。

バット

set FILE_1=c:\bleep\bloop\some.file
set HELLO=Hello bob
set TAX=17.5
start excel "c:\null\book1.xlsm"

エクセル

Sub Workbook_Open()
msgbox environ$("FILE_1")
msgbox environ$("HELLO")
msgbox environ$("TAX")
于 2012-06-08T12:03:07.777 に答える