ユーザーフォームのイベント

ユーザーフォームの基本的なイベントであるフォームの初期処理、終了処理に該当する3つのイベントについて説明します。

スポンサーリンク

初期処理、終了処理イベント

  • Initialize イベント
    ユーザーフォームが表示される前に発生するイベントです。 変数の初期化や、コントロールの初期設定(リストボックスへのアイテム追加)などをする場合に使用します。
    ※厳密にはフォームが”表示される前”ではなく、フォームが”ロード”されるタイミングで発生します。
  • QueryClose イベント
    ユーザーフォームが閉じられようとする直前で発生するイベントです。 ユーザーフォームがアンロード(”Unload Me”など)されたり、フォーム右上のxボタンを押したりするとこのイベントが発生します。 このイベントプロシージャには引数 Cancel があり、この引数に True を設定することでイベント(フォームを閉じる操作)をキャンセルすることができます。 ユーザーがフォームを閉じようとするときに確認したいことがある場合に使用します。
  • Terminate イベント
    ユーザーフォームが閉じられたときに発生するイベントです。 ユーザーフォームに入力された値や処理した結果をワークシートや広域変数へ退避する場合などに使用します。

イベントプロシージャの追加の流れ

サンプルとして前述のページ(ユーザーフォームの作成)のユーザーフォームを使用し、これに上記3つのイベントプロシージャを追加していきます。

ユーザーフォームのコード表示

ユーザーフォームオブジェクトの右クリックから コードの表示 を選択し、ユーザーフォームのコードを表示します。

ユーザーフォームのコード表示
ユーザーフォームのコード表示

イベントプロシージャの追加

コードを表示したら、上部のオブジェクトボックスから”UserForm”を選択します。

オブジェクトボックスからUserFormを選択
オブジェクトボックスからUserFormを選択

つづいて、プロシージャボックスから”Initialize”を選択します。

プロシージャボックスからInitializeを選択
プロシージャボックスからInitializeを選択

すると Initialize イベントプロシージャが追加されます。

Initialize イベントプロシージャが追加された様子
Initialize イベントプロシージャが追加された様子

この過程で”UserForm_Click”というイベントプロシージャが追加されてしまう場合がありますが、
この説明では使用しないので、削除しても問題ありません。

QueryClose と Terminate イベントについても同様に追加します。

QueryClose と Terminate イベントが追加された様子
QueryClose と Terminate イベントが追加された様子

コードの追加

各イベントの処理タイミングがわかるようにするために、ここではデバッグ表示用のコードを追加します。QueryClose イベントプロシージャにはフォームを閉じるときに確認を行うコードを追加します。

各イベントプロシージャにコードを追加した様子
各イベントプロシージャにコードを追加した様子

イベント発生タイミングの確認

それでは実際にユーザーフォームを表示して、動作を確認してみましょう。
※動作を確認する前に Ctrl ]+ Gイミディエイトウィンドウを開いておきます。

Initialize イベント

ユーザーフォームを マクロの実行 ボタンや、 F5 キーなどから表示します。イミディエイトウィンドウには以下のように表示されますので、Initialize イベントが発生したことがわかります。

QueryClose イベント

次にユーザーフォーム上の 閉じる ボタン、または、右上のボタンを押してみます。すると、フォームを閉じる前の確認ダイアログが表示されますので、ここでは キャンセル ボタンを押下します。ユーザーフォームが閉じないことを確認してくさい。

フォームを閉じる直前の確認でキャンセルボタンを押下
フォームを閉じる直前の確認でキャンセルボタンを押下

イミディエイトウィンドウには”UserForm_QueryClose”は表示され、”UserForm_Terminate”が表示されていません。このことから、フォームを閉じる処理がキャンセルされて、Terminate イベントが発生しなかったことがわかります。

Terminate イベント

再度ユーザーフォームを閉じる操作を行い、今度はフォームを閉じる前の確認ダイアログで OK ボタンを押下します。フォームが閉じたことを確認してください。

フォームを閉じる直前の確認でOKボタンを押下
フォームを閉じる直前の確認でOKボタンを押下

イミディエイトウィンドウには”UserForm_Terminate”が表示され、Terminate イベントが発生したことがわかります。

タイトルとURLをコピーしました