ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.002

ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》

2003/2007/2010/2013

ブックを開くときに処理を自動動作させたいときです。

通常マクロを作成したりVBAを記述するときは、「標準モジュール」を使用しますが、何らかのタイミングで自動的に動作させる場合は「イベント プロシージャ」を作成します。

イベント プロシージャは、Visual Basic Editor(以下VBE)のオブジェクト モジュールに記述します。
また、ブックを開くとき、閉じるときの自動実行のみ、標準モジュールに記述することができます。

今回は、ブックを開くときと閉じるときの自動実行をさせる記述を2通りでご案内します。

<ブックのオブジェクト モジュール>

VBEを開き、左上プロジェクト エクスプローラの[ThisWorkbook]をダブルクリックします。
表示されたブックのオブジェクト モジュール、タイトル バーに「ThisWorkbook」の表示があるのを確認しましょう。

VBEThisWorkbook

次に、モジュール左上の[オブジェクト]ボックスで[Workbook]を選択すると、右の[プロシージャ]ボックスでは[Open]が自動的に指定され、プロシージャ名などが入るのを確認します。
表示された[Private Sub Workbook_Open()]のプロシージャに、自動実行するためのVBAを記述します。このとき、プロシージャ名は変更しないようにします。

Workbook_Open

上図は、「ブックを開くときSheet2がアクティブになる」動作です。

Private Sub Workbook_Open()
  起動時に自動実行する記述
End Sub

閉じるときの場合は、右の[プロシージャ]ボックスで[BeforeClose]を選択し、表示された[Private Sub Workbook_BeforeClose(Cancel As Boolean)]のプロシージャに、自動実行するためのVBAを記述します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  終了時に自動実行する記述
End Sub

BeforeCloseのイベント プロシージャを挿入すると、先に入っているOpenの記述は残っています。そのままでも問題はないですが、必要がなければ削除しておくようにしましょう。

自動実行する処理は、いつものようにVBAを記述してください。

<標準モジュール>

起動時、終了時のイベント プロシージャのみ、標準モジュールでも作成することができます。
では早速、VBEで標準モジュールを追加します。

起動時の場合、プロシージャ名を「Sub Auto_Open()」としてプロシージャを作成します。

Sub Auto_Open()
  起動時に自動実行する記述
End Sub

終了時の場合、プロシージャ名を「Sub Auto_Close()」です。

Sub Auto_Close()
  終了時に自動実行する記述
End Sub

ともにプロシージャ名は変更しないようにします。

Sub Auto_Open()

上図は、「ブックを閉じるときこのブックを上書き保存する」動作です。

関連ヘルプ

ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》
データを快速で検索するには 《Find》
アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》
エラーの種類、そしてエラー処理の設置方法について 《On Error GoTo》
InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》
Excelのデータをテキスト ファイルに書き出す(出力する) 《Open・Print・Close》
ExcelからOutlookでメールを作成・送信する基本のVBA 《CreateObject関数》
Excelのメールアドレス データを使用し、Outlookのメールを自動送信する 《CreateObject関数》
ソートしたグループごとのデータを別ブックに分割するサンプルVBA
右クリック、印刷、上書き保存などブックに規制をかける 《イベント プロシージャ Cancel=True》
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》
ColorプロパティとRGB関数について、Color値からRGB、RGBからColor値を求める方法 《Color・RGB関数》
twitter hatena line pocket