vbsでExcel VBAを実行する

過去記事の「パターン1. 特定の場所にxlsmブックを作り、外部から参照する方法(Application.Run)」の補足。 以前は特定のファイルのVBAを実行する方法として、別ブックのSubプロシージャから起動する方法を説明した。

art-of-lives.hatenablog.com

今回はVBScriptから起動する方法を説明する。この方法だとvbsファイルをダブルクリックするだけでVBAの実行が可能。
イメージとしてはパターン1の呼び出し側のブックに記述されているVBAコードを、独立したファイルに外に出すものとなる。 コードも過去記事のパターン1であるVBA版コードを手直ししたものとなる。

Const FilePath = "C:\book.xlsm"
Const FunctionName = "call_msgbox"

With WScript.CreateObject("Excel.Application")
    .Visible = True 'Trueなら実行時にExcelの画面を表示
    .Workbooks.Open FilePath
    .Application.Run FunctionName
    .Quit
End With

メモ帳に上記コードをコピーして、ファイル名の最後を .vbs にすれば完成である。vbsファイルをダブルクリックすると C:\book.xlsm の call_msgbox という関数が呼び出される。
1行目のファイルパスと2行目の関数名は適宜変えることになる。

応用としてファイル名の変更が不要なバージョンも説明する。

FilePath = Replace(WScript.ScriptFullName, ".vbs", ".xlsm")
Const FunctionName = "main"

With WScript.CreateObject("Excel.Application")
    .Visible = True 'Trueなら実行時にExcelの画面を表示
    .Workbooks.Open FilePath
    .Application.Run FunctionName
    .Quit
End With

このファイルを .vbs で保存するほか、実行したいxlsmファイルと同じフォルダに xlsmファイルと同じ名前で保存(この例では book.vbs )する。関数名は main など適当な名前に決めておくと使い回したときにいちいち変える手間がない。このvbsファイルをダブルクリックすればbook.xlsmのmainプロシージャor関数が呼び出される。
変わったのは1行目のみで"WScript.ScriptFullName"で自分(book.vbs)のファイルパスを取得し.vbsを.xlsmに置換することで、呼び出すxlsmファイルのパスを作成する。

githubにサンプルをアップロードしている。 github.com