Excelの内容を書き出したいとか、その他もろもろのときで、
・Excelは表示しないで、
・Excelのマクロを、
・コマンドラインから実行したい
ときは、ありませんか?
で、こーいうときは、たいてい、
・引数もいるのです。。
そういうとき、どうするか・・
ここが参考になりました。
Excel 起動オプションのお話(引数的なラブレターを渡したい)
http://www.ken3.org/vba/backno/vba086.html
■仕様
いま、引数に渡されたファイル名をもとに、引数の内容を書き出すという、
Excelのマクロプログラム(関数testmsg)が、下のよう
Public Sub testmsg(outfname As String, msg As String) On Error GoTo err ' ファイルにメッセージを書き出す Open outfname For Output As #1 Print #1, msg Close #1 ' 実行したら、Excelを終了する Application.Quit Exit Sub err: ' エラーのときは表示しないとわかんないので Application.Visible = True MsgBox "エラーが起きました" End Sub |
にあったとします。
(このマクロが入っているExcelファイル名:Book1.xls)
これを、コマンドラインから呼び出すには?
■VBスクリプトを使って呼び出す
以下のようなVBスクリプトを用意します。
Dim oApp Set oApp = CreateObject("Excel.Application") ' Excelは非表示にする oApp.Visible = False '引数のチェック、ファイルを開く Set WshArguments = WScript.Arguments Set WshNamed = WshArguments.Named If WshNamed.Exists("file") Then oApp.Workbooks.Open WshNamed("file") 'ファイルを開く oApp.Run "testmsg" , WshNamed("outfname"),WshNamed("msg") End If |
これを、いま、test.vbsというファイル名で保存したとします。
■コマンドラインからVBスクリプト呼び出し
そして、コマンドラインから、
test.vbs /file:¥temp¥book1.xls /outfname:¥temp¥kekka.txt /msg:123
(¥は、本当は半角)
とやるとtempフォルダの下のbook1.xlsのマクロを実行して、kekka.txtを書き出します
(内容は123)
書き出しているとき、Excelは表示されません。
これでできました。
めでたしめでたし。