ユーザーフォームの基本的なイベントであるフォームの初期処理、終了処理に該当する3つのイベントについて説明します。
初期処理、終了処理イベント
- Initialize イベント
ユーザーフォームが表示される前に発生するイベントです。 変数の初期化や、コントロールの初期設定(リストボックスへのアイテム追加)などをする場合に使用します。
※厳密にはフォームが”表示される前”ではなく、フォームが”ロード”されるタイミングで発生します。 - QueryClose イベント
ユーザーフォームが閉じられようとする直前で発生するイベントです。 ユーザーフォームがアンロード(”Unload Me”など)されたり、フォーム右上のxボタンを押したりするとこのイベントが発生します。 このイベントプロシージャには引数 Cancel があり、この引数に True を設定することでイベント(フォームを閉じる操作)をキャンセルすることができます。 ユーザーがフォームを閉じようとするときに確認したいことがある場合に使用します。 - Terminate イベント
ユーザーフォームが閉じられたときに発生するイベントです。 ユーザーフォームに入力された値や処理した結果をワークシートや広域変数へ退避する場合などに使用します。
イベントプロシージャの追加の流れ
サンプルとして前述のページ(ユーザーフォームの作成)のユーザーフォームを使用し、これに上記3つのイベントプロシージャを追加していきます。
ユーザーフォームのコード表示
ユーザーフォームオブジェクトの右クリックから コードの表示 を選択し、ユーザーフォームのコードを表示します。
イベントプロシージャの追加
コードを表示したら、上部のオブジェクトボックスから”UserForm”を選択します。
つづいて、プロシージャボックスから”Initialize”を選択します。
すると Initialize イベントプロシージャが追加されます。
この過程で”UserForm_Click”というイベントプロシージャが追加されてしまう場合がありますが、
この説明では使用しないので、削除しても問題ありません。
QueryClose と Terminate イベントについても同様に追加します。
コードの追加
各イベントの処理タイミングがわかるようにするために、ここではデバッグ表示用のコードを追加します。QueryClose イベントプロシージャにはフォームを閉じるときに確認を行うコードを追加します。
イベント発生タイミングの確認
それでは実際にユーザーフォームを表示して、動作を確認してみましょう。
※動作を確認する前に Ctrl ]+ G でイミディエイトウィンドウを開いておきます。
Initialize イベント
ユーザーフォームを マクロの実行 ボタンや、 F5 キーなどから表示します。イミディエイトウィンドウには以下のように表示されますので、Initialize イベントが発生したことがわかります。
QueryClose イベント
次にユーザーフォーム上の 閉じる ボタン、または、右上のxボタンを押してみます。すると、フォームを閉じる前の確認ダイアログが表示されますので、ここでは キャンセル ボタンを押下します。ユーザーフォームが閉じないことを確認してくさい。
イミディエイトウィンドウには”UserForm_QueryClose”は表示され、”UserForm_Terminate”が表示されていません。このことから、フォームを閉じる処理がキャンセルされて、Terminate イベントが発生しなかったことがわかります。
Terminate イベント
再度ユーザーフォームを閉じる操作を行い、今度はフォームを閉じる前の確認ダイアログで OK ボタンを押下します。フォームが閉じたことを確認してください。
イミディエイトウィンドウには”UserForm_Terminate”が表示され、Terminate イベントが発生したことがわかります。