バッチファイルから
・VBAのプロシージャを(間接的に)実行
できます!
直接VBAを実行できないため
・VBScriptファイルから間接的に実行
します!
つまりバッチファイル内で
・VBScriptファイルを作成
・VBScriptファイル(=VBA)を実行
・VBScriptファイルを削除
により実現します!
前提
バッチファイルからVBAを直接実行できないため、バッチファイル内で以下の3つを実施します。
VBAのコード
ここでは例として、
・デスクトップ配下のExcelファイル「sampl_001.xlsm」の
・モジュール「testModule」に
・Subプロシージャ「sample」
を作成します。
Sub sample()
'メッセージ出力
MsgBox ("VBAからのメッセージ出力です!")
End Sub
バッチファイルのコード
ここでは例として、
・上記で作成したVBAコードを実行する
・バッチファイルを作成
します。
@echo off
REM -------------------------------------
REM 実行するExcelファイル、モジュール名、プロシージャ名を指定
REM -------------------------------------
set excelFile=C:\Users\user\Desktop\sampl_001.xlsm
set module=testModule
set proc=sample
REM -------------------------------------
REM VBScriptファイル作成
REM -------------------------------------
set vbsFile=%~dp0vbsFile.vbs
REM 変数
echo Dim objExcel > %vbsFile%
REM Excelオブジェクトを取得
echo Set objExcel = CreateObject("Excel.Application") >> %vbsFile%
REM ExcelファイルをOPEN
echo objExcel.Workbooks.Open("%excelFile%") >> %vbsFile%
REM Excelファイルを非表示
echo objExcel.Visible = False >> %vbsFile%
REM 「モジュール名.マプロシージャ」を実行
echo objExcel.Run "%module%.%proc%" >> %vbsFile%
REM Excelを終了
echo objExcel.Quit >> %vbsFile%
REM 後片付け
echo Set objExcel = Nothing >> %vbsFile%
REM -------------------------------------
REM VBScriptファイル実行
REM -------------------------------------
cscript %vbsFile%
REM -------------------------------------
REM VBScriptファイル削除
REM -------------------------------------
DEL %vbsFile%
exit
上記で作成される「VBScriptファイル」は以下になります。
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open("C:\Users\user\Desktop\sampl_001.xlsm")
objExcel.Visible = False
objExcel.Run "testModule.sample"
objExcel.Quit
Set objExcel = Nothing
実行結果
上記で作成したバッチファイル「excel_vba実行サンプル.bat」を実行すると、バッチファイルからVBScript(=VBAのプロシージャ)が実行できたことを確認できます。
参考①
「バッチファイル内で作成しているVBScriptファイル」は、以下の記事を参考にしました。
参考②
「バッチファイル内でVBAを実行するVBScriptファイルを作成する」という発想は、以下の記事を参考にしました。
参考③
Power ShellからVBAのプロシージャを実行することもできます。
詳細は以下の記事をご確認ください。
参考④
VBAからバッチファイルを実行することもできます。
詳細は以下の記事をご確認ください。
参考⑤
バッチファイルのノウハウサイトも運営しています。
合わせてご確認ください!