【VBA】バッチファイルからVBAのプロシージャを実行する

バッチファイルから
 ・VBAのプロシージャを(間接的に)実行
できます!

直接VBAを実行できないため
 ・VBScriptファイルから間接的に実行
します!

つまりバッチファイル内で
 ・VBScriptファイルを作成
 ・VBScriptファイル(=VBA)を実行
 ・VBScriptファイルを削除
により実現します!

PR

前提

バッチファイルからVBAを直接実行できないため、バッチファイル内で以下の3つを実施します。

バッチファイル内で実施すること
  • VBScriptファイル作成
    VBAを実行するVBScriptファイルを作成します。

  • VBScriptファイル実行
    ・作成したVBScriptファイルを実行します。

  • VBScriptファイル削除
    ・作成したVBScriptファイルを削除します。
PR

VBAのコード

ここでは例として、
 ・デスクトップ配下のExcelファイル「sampl_001.xlsm」の
 ・モジュール「testModule」に
 ・Subプロシージャ「sample」
を作成します。

VBAコードを作成するExcelファイル
VBAコードを作成するExcelファイル
モジュール「testModule」のSubプロシージャ「sample」
モジュール「testModule」のSubプロシージャ「sample」
Sub sample()
    'メッセージ出力
    MsgBox ("VBAからのメッセージ出力です!")
End Sub
PR

バッチファイルのコード

ここでは例として、
 ・上記で作成した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

実行する「Excelファイル」、「モジュール名」、「プロシージャ名」を指定します(6~8行目)。
※状況に合わせて変更してください。
※上記では先ほど作成した「デスクトップ配下のsampl_001.xlsm」、「testModule」、「sample」としています。

VBAコードを実行する「VBScriptファイル」を作成しています(13~ 28行目)。
※上記ではカレントディレクトリ配下に「vbsFile.vbs」を作成しています(13行目)。
※「%~dp0」により、カレントディレクトリを取得しています(13行目)。

「VBScriptファイル」を実行しています(33行目)。

「VBScriptファイル」を削除しています(38行目)。


上記で作成される「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 
PR

実行結果

上記で作成したバッチファイル「excel_vba実行サンプル.bat」を実行すると、バッチファイルからVBScript(=VBAのプロシージャ)が実行できたことを確認できます。

実行結果
実行結果

上記のメッセージボックスは、最背面(コマンドプロンプト画面の裏側)に表示されているかもしれません。

上記のメッセージボックスが表示されていないように見える場合は、最背面(コマンドプロンプト画面の裏側)をご確認ください。

PR

参考①

「バッチファイル内で作成しているVBScriptファイル」は、以下の記事を参考にしました。

PR

参考②

「バッチファイル内でVBAを実行するVBScriptファイルを作成する」という発想は、以下の記事を参考にしました。

PR

参考③

Power ShellからVBAのプロシージャを実行することもできます。

詳細は以下の記事をご確認ください。

PR

参考④

VBAからバッチファイルを実行することもできます。

詳細は以下の記事をご確認ください。

PR

参考⑤

バッチファイルのノウハウサイトも運営しています。
合わせてご確認ください!