【VBA】タスクスケジューラからマクロ(VBA)を自動実行する【batやVBScriptは不要】

タスクスケジューラから
 ・マクロ(VBA)を自動実行
できます!

バッチファイルやVBScriptファイルが無くとも
マクロ(VBA)を自動実行できます!

※他のサイトでは必要である旨が記載されていますが、無くてもできます。

マクロの自動実行は
 ・VBAコード(実行させたい処理)
 ・VBAコード(Openイベント)
 ・タスクスケジューラでExcelファイルを開く
で実現できます!
※バッチファイルやVBScriptファイルは不要です。

自動実行させた後の
 ・Excelファイルの閉じ方がポイント
です!
※中途半端にExcelが起動した状態にならないように工夫が必要です。

PR

VBAコード(実行させたい処理)

実行させたい処理のマクロ(VBA)を作成します。

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

デスクトップ配下のExcelファイル「sampl_001.xlsm」
デスクトップ配下のExcelファイル「sampl_001.xlsm」
Sub sample()
    'メッセージ出力
    MsgBox ("sampl_001.xlsmのマクロを実行しました!")
End Sub


「sampl_001.xlsm」のプロシージャ「sample()」
「sampl_001.xlsm」のプロシージャ「sample()」
PR

VBAコード(Openイベント)

実行させたい処理のマクロ(VBA)を呼び出します。
「ThisWorkbookモジュール」に「Workbook_Open」サブプロシージャを記述します。

Private Sub Workbook_Open()

    Dim isBookOpen As Boolean

    '実行させたい処理を呼び出す
    Call sample
    
    '他に開いているブックがあるかどうかを確認
    isBookOpen = False
    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            isBookOpen = True
            Exit For
        End If
    Next
    
    '他に開いているブックがあるかどうかで分岐
    If isBookOpen Then
        'Excelファイルを保存せずに閉じる
        ThisWorkbook.Close SaveChanges:=False
    Else
        'Excelを終了する
        Application.Quit
    End If
    
End Sub

実行させたい処理のマクロ(VBA)を呼び出します(6行目)。

他に開いているブックがあるかどうかを確認します(9~15行目)。

「Workbooks」で「開いている全てのブックのコレクション」を取得します(10行目)。
※「Workbooks」は「Applicationオブジェクト」の「Workbooks」プロパティを省略した記述方法です。

他に開いているブックがある場合、VBAコードを実行させているExcelのみを閉じます(20行目)。
※「Workbookオブジェクト」の「Close」メソッドで閉じます。
※上記では「Close」メソッドの引数「SaveChanges」に「False」を指定して「保存せずに閉じる」をしています。
※状況に応じて「True」を指定して「保存して閉じる」にしてください。

他に開いているブックが無い場合、Excelを終了します(23行目)。
※他に開いているブックが無い状態で閉じると「中途半端にExcelが起動した状態」になってしまうため。
※「Applicationオブジェクト」の「Quit」メソッドによりExcelを終了します

PR

タスクスケジューラでExcelファイルを開く

上記でマクロ(VBA)を作成したExcelファイルを自動で開くように、タスクスケジューラを設定します。

Excelファイルを開くことでExcelの「Openイベント」が発生します。「Openイベント」により作成したマクロ(VBA)が自動実行されます。


手順①

検索窓に「タスクスケジューラ」と入力し、表示された「タスクスケジューラ」をクリックする。

手順①
手順①


手順②

左側にある「タスク スケジューラ ライブラリ」をクリックして選択状態にする。

手順②
手順②


手順③

右側にある「新しいフォルダー」をクリックし、任意の名前でフォルダを作成する。
※ここでは例として「VBA」フォルダを作成します。

手順③-1
手順③-1
手順③-2
手順③-2


手順④

作成したフォルダをクリックし選択状態にして、右側にある「タスクの作成」をクリックする。

手順④-1
手順④-1
手順④-2
手順④-2


手順⑤

「名前」に任意の名前を入力する。
※ここでは例として「TaskVBA」とします。

手順⑤
手順⑤


手順⑥

「トリガー」タブの「新規作成」をクリックする。

手順⑥
手順⑥


手順⑦

マクロを自動実行させるタイミングを設定して「OK」をクリックする。
※ここでは例として「2021/11/03の12時に起動」するように設定します。

手順⑦
手順⑦


手順⑧

「操作」タブの「新規作成」をクリックする。

手順⑧
手順⑧


手順⑨

●「プログラム/スクリプト」にExcelの実行ファイルである「EXCEL.EXE」のフルパスを記述する。
※ここでは「C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE」を記述します。
※パスに半角スペースが含まれるため、前後に「」を記述します。

●「引数の追加(オプション)」に「上記で作成したExcelファイル」のフルパスを記述する。
※ここでは上記で作成した「‪C:\Users\user\Desktop\sampl_001.xlsm」を記述します。

●「OK」をクリックする。

手順⑨
手順⑨
PR

実行結果

タスクスケジューラの設定が上手くできているかを確認するため、設定したトリガーを手動で実行します。

手動で実行する手順

タスクスケジューラの右側にある「実行」をクリックする。

手動で実行する手順
手動で実行する手順


上記を実施すると
 ・「VBAコード(実行させたい処理)」が
 ・自動実行されることを確認

できます。

実行結果
実行結果
PR

参考①

上記のVBAコードを修正する際は、Openイベントが発生しない方法でExcelファイルを開いてください。
※上記に記載の「Workbook_Open」サブプロシージャには、Excelファイルを閉じる処理も記載しています。
※よって普通に開くと処理完了後に自動で閉じてしまいます。
※自動で閉じてしまうため、普通に開くとVBAコードの修正ができません。


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

PR

参考②

タスクスケジューラからExcel(VBA)を実行できない時は、以下の記事の対応をしてみてください。

PR

参考③

タスクスケジューラに設定されているタスクの一覧を取得できます。

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

PR

参考④

上記のVBAコードで使用した以下の詳細は、以下の記事をご確認ください。

●Openイベント

PR

参考⑤

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Workbookオブジェクト」の「Close」メソッド


●「Applicationオブジェクト」の「Workbooks」プロパティ


●「Applicationオブジェクト」の「Quit」メソッド