VBA技術解説
ブックが閉じる時に自動実行(Workbook_BeforeCloseとAuto_Close)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-09-09 最終更新日:2023-02-22

ブックが閉じる時に自動実行(Workbook_BeforeCloseとAuto_Close)


Excelブックを閉じる時にマクロVBAを自動実行させる方法として、
Workbook_BeforeClose
Auto_Close
この2通りの方法があります。
それぞれの簡単な説明と、動作の違いを解説します。


Workbook_BeforeClose

Workbook_Closeは、ブックが閉じられたときに起動されるブックのイベントプロシージャーになります。
Workbookのイベントプロシージャー|VBA入門
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange:Workbookのイベント

VBEの「Microsoft Excel Objects」内の「ThisWorkbook」に記述します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  '処理を記述
End Sub

Cancel = True

とすると、Closeイベントはキャンセルされます、
つまり、ブックは閉じられません。

参考
ブックが閉じられる直前に保存済を確認(Workbook_BeforeClose)
Workbook_BeforeCloseは、ブックを閉じる直前に起動されるイベントです、手動で閉じる場合も、VBAで閉じる場合でも起動されます。ブックが未保存の場合、無条件でブックを保存する ブックが未保存の場合は、Closeをキャンセルする。

Auto_Close

Auto_Closeは、ブックが閉じられたときに起動される特殊なプロシージャーになります。
標準モジュールに記述します。

Private Sub Auto_Close()
  '処理を記述
End Sub

プロシージャー名は全て小文字(auto_close)で書いても問題ありません。
真ん中の_(アンダースコア)を書き忘れてしまうと起動されません。
また、
どのモジュールに記述しても問題ありませんが、2つ以上のモジュールに記述するとエラーとなります。

※Auto_Closeは、以前のバージョンとの互換性を保持するために残されているものです。

Workbook_BeforeCloseとAuto_Closeの実行順序

Workbook_OpenもAuto_Openも、どちらもブックが開かれたときに自動的に起動されますが、
そうなると、どちらが先に動くかが問題となります。

Workbook_BeforeClose
↓
Auto_Close


この順序で(Workbook_BeforeCloseが先に)起動されます。

Workbook_BeforeCloseとAuto_Closeの違い

まず一番大きな違いとしては、Workbook_BeforeCloseには、引数としてCancelがありますので、
条件によって、Closeさせたくない場合は、Workbook_BeforeCloseを使います。

また、他のブックのマクロVBAでブックをCloseした時には、
Workbook_BeforeCloseは起動されますが、Auto_Closeは起動されません。

Workbooks("Book1.xls").Close Savechanges:=True

この場合、Book1のWorkbook_BeforeCloseは実行され、Auto_Closeは実行されません。
※ただし、Workbook_BeforeCloseが起動される条件としては、
Application.EnableEventsがTrueの状態の場合です。
イベントが無効となっている場合は起動されません。
Application.EnableEvents = False
この場合はWorkbook_BeforeCloseも起動されません。

マクロVBAでブックをCloseしたときにAuto_Openを実行するには

Application.Run "Book1.xls!Auto_Close"
または、
Workbooks("Book1.xls").RunAutoMacros Which:=xlAutoClose
これらのどちらかをWorkbooks.Closeに先がけて記述する必要があります。

RunAutoMacrosのWhich:=XlRunAutoMacroの値
XlRunAutoMacro列挙
xlAutoActivate Auto_Activate マクロ
xlAutoClose Auto_Close マクロ
xlAutoDeactivate Auto_Deactivate マクロ
xlAutoOpen Auto_Open マクロ


Auto_Closeは以前のバージョンとの互換性を保持するために残されているものですので、
特段の理由がなければ、Workbook_BeforeCloseのみを使用した方が良いでしょう。




同じテーマ「マクロVBA技術解説」の記事

イベント処理について
ブックが開いた時に自動実行(Workbook_OpenとAuto_Open)
ブックが閉じる時に自動実行(Workbook_BeforeCloseとAuto_Close)


新着記事NEW ・・・新着記事一覧を見る

Excelの新機能「リストとセル内配列」:1つのセルに複数の値|エクセル入門(2026-09-28)
Excel関数クロスワード(2026-09-26)
Excelショートカットキークイズ(2026-09-23)
Excel関数名クイズ(2026-09-21)
気ままに一手|リレー将棋(2026-09-20)
ITエンジニアがトラブルを避けるための法律・契約入門|エクセル雑感(2026-09-18)
ITエンジニアなら知らないと恥ずかしい数学20選|エクセル雑感(2026-09-17)
ITエンジニアのための税金と社会保険のお話|エクセル雑感(2026-09-15)
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ