教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA ブック操作】ブックを閉じる時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

f:id:m_kbou:20200506113147p:plain

VBAでは操作をきっかけとして自動的に実行されるプロシージャの事を「イベントプロシージャ」と言います。自動実行のきっかけとなる操作の事を「イベント」と呼び、「イベント」はブックやワークシート、ユーザーフォーム等のオブジェクトに対して発生します。このイベントを利用して「ブックを閉じる時に発生するイベントプロシージャの作り方」について紹介します。

 

 

構文 

イベントプロシージャの記述方法は以下の通りです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  [実行する処理内容]
End Sub

[説明]:

ブックを閉じる時に発生するイベントプロシージャにはBeforeCloseプロシージャを使用します。[実行する処理内容]にはブックを閉じる際に実行させる内容を記述します。Cancelは引数となり、「True」をセットするとイベントを中止し、「False」をセットするとイベントを実行します。初期値では「False」がセットされています。内容を纏めると、「ブックを閉じる時に[実行する処理組内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  MsgBox "ブックを閉じます。"
End Sub

 

作り方

VBE(VBA記述画面)を開きます。

※画面の開き方はこちらの手順を参考にして下さい。

f:id:m_kbou:20200506112801p:plain

(2)ブックオブジェクトをダブルクリックします。

f:id:m_kbou:20200506112815p:plain

(3)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20200506112838p:plain

(4)プルダウン一覧の中から「WorkBook」を選択します。

f:id:m_kbou:20200506112853p:plain

(5)「Workbook_Open」イベントプロシージャが表示されます。(※これは自動的に作成される仕組みとなっている様です。)

f:id:m_kbou:20200506112910p:plain

(6)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20200506112923p:plain

(7)プルダウン一覧の中から「BeforeClose」を選択します。

f:id:m_kbou:20200506112953p:plain

(8)「Workbook_BeforeClose」イベントプロシージャが表示されます。

f:id:m_kbou:20200506113025p:plain

(9)(8)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を2つ紹介します。

(例①)ブックを閉じる際にメッセージを表示する方法

ブックを閉じる際にメッセージを表示する方法を紹介します。

[プログラミング例①]:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  MsgBox "ブックを閉じます。"
End Sub

内容は、「ブックを閉じる際に”ブックを閉じます。”をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210324173933p:plain

[実行例①]:

今回の例としては、Book1.xlsmブックが開かれており、ブックには上記で説明したプログラミング例①が記述されています。

(実行前)

Book1.xlsmブックの右上<×>ボタンをクリックし、ブックを閉じます。

f:id:m_kbou:20210324173824p:plain

(実行後)

Book1.xlsmブックが閉じる前に「ブックを閉じます。」が表示されます。(※Book1.xlsmブックを閉じる事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210324173836p:plain

[サンプル①]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例②)ブックが未保存の場合はブックを閉じない設定とする方法

ブックが未保存の場合はブックを閉じない設定方法を紹介します。

[プログラミング例②]:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ActiveWorkbook.Saved = False Then
    MsgBox "保存されていません。"
    Cancel = True
  End If
End Sub

内容は、Savedプロパティを使用して「ブックを閉じる際にブックが未保存の場合には”保存されていません。”をMsgBoxで表示し、閉じるイベントをキャンセルして下さい。」との意味になります。

f:id:m_kbou:20210603090405p:plain

[実行例②]:

今回の例としては、Book1.xlsmブックが開かれており、ブックには上記で説明したプログラミング例②が記述されています。

(実行前)

Book1.xlsmブックのA1セルに「テスト」の文字を入力後、右上<×>ボタンをクリックし、ブックを閉じます。

f:id:m_kbou:20210603090424p:plain

(実行後)

「保存されていません。」が表示され、Book1.xlsmブックを閉じる事ができません。(※Book1.xlsmブックが保存されていない事で、引数のCancelに「True」がセットされてイベントがキャンセルされました。)

f:id:m_kbou:20210603095023p:plain

[サンプル②]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

ブックを閉じる時に発生するイベントプロシージャの作成方法についての説明は以上です。

 

おわりに

今回はブックを閉じる時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Workbook_Open」イントプロシージャが自動的に作成(上記(5)の内容)されます。不要な場合は削除して下さい。