フォームを閉じる直前に処理を実行するには、フォームのQueryCloseイベントプロシージャを使用します。その使い方について紹介します。
構文
イベントプロシージャの記述方法は以下の通りです。
Private Sub[オブジェクト名]_QueryClose(Cancel As Integer, CloseMode As Integer)
[実行する処理内容]
End Sub
[説明]:
フォームを閉じる時に実行されるイベントプロシージャです。
[オブジェクト名] | フォームに付けた名前(オブジェクト名)を記述します。 |
[実行する処理内容] | イベントが実行された時に処理する内容を記述します。 |
このイベントプロシージャにはオプションが設定されています。
オプションの内容は以下の通りとなります。
Cancel | イベントの実行/中止を指定できます。 ・「True」をセットした場合:イベントを中止します。 ・「False」をセットした場合:イベントを実行します。 ※初期値は「False」がセットされています。 |
CloseMode | フォームを閉じようとした時の動作値がセットされます。 セットされる動作値は以下いずれかとなります。 ・[×]ボタンでフォームを閉じた時:0 ・Unloadステートメント等のコードで閉じた時:1 ・Windowsが終了した時:2 ・タクマネージャによって閉じた時:3 |
[記述例]:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "画面を閉じます。"
End Sub
[サンプル画面]:
今回は以下のフォームを使用して処理を実行する方法について説明します。
※フォームの作成方法についてはこちらを参考にして下さい。
QueryCloseイベントプロシージャの記述方法
(1)VBE(VBA記述画面)を開き、予め作成したフォームがある事を確認します。(※VBEの開き方についてはこちらを参考にして下さい。)
(2)UserForm1フォームをダブルクリックします。
(3)UserForm1フォームが表示されるので、フォーム上の任意の場所で右クリックします。そうすると小窓が開くので、「コードの表示」を選択します。
※この時点で「UserForm_Click」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっている様です。)
(4)オブジェクトボックスの▼ボタンをクリックします。
(5)プルダウン一覧の中から「UserForm」を選択します。
(6)プロシージャボックスの▼ボタンをクリックします。
(7)プルダウン一覧の中から「QueryClose」を選択します。
(8)「UserForm_QueryClose」イベントプロシージャが表示されます。(※このUserForm_QueryCloseイベントプロシージャの中に実行する処理内容を記述する事で、フォームを閉じる直前に処理を実行する事ができます。これ以降は実行する処理例について紹介します。)
(9)(8)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を2つ紹介します。
(例①)フォームを閉じる時にメッセージを表示する方法
フォームを閉じる時にメッセージを表示する方法について紹介します。
[プログラミング例①]:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "画面を閉じます。"
End Sub
内容を説明すると、
「UserForm1フォームを閉じる直前に”画面を閉じます。”のメッセージを表示して下さい。」
との意味になります。
[実行例①]:
(実行前)
プログラムを実行します。(※実行するにはメニューにある実行ボタン(▶)をクリックします。)
UserForm1画面が表示されるので、画面右上の[×]をクリックします。
(実行後)
画面が閉じられると同時に「画面を閉じます。」のメッセージが表示されます。(※QueryCloseイベントプロシージャが有効に実行された事がわかります。)
[サンプル①]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。します。
(例②)フォームの[×]ボタンをクリックした時はフォームを閉じられない様に設定する方法
フォームの[×]ボタンをクリックした時はフォームを閉じられない様に設定する方法について紹介します。
[プログラミング例②]:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "[×]ボタンでは閉じられません。"
Cancel = True
End If
End Sub
内容を説明すると、
「UserForm1フォームの[×]ボタンをクリックした場合は、”[×]ボタンでは閉じられません。”のメッセージを表示して下さい。」
との意味になります。
[実行例②]:
(実行前)
プログラムを実行します。(※実行するにはメニューにある実行ボタン(▶)をクリックします。)
UserForm1画面が表示されるので、画面右上の[×]をクリックします。
(実行後)
「[×]ボタンでは閉じられません。」のメッセージが表示され、フォームと閉じる事ができません。(※QueryCloseイベントプロシージャが有効に実行された事がわかります。)
[サンプル②]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。します。
QueryCloseイベントプロシージャの記述方法についての説明は以上です。
おわりに
今回はフォームを閉じる直前に処理を実行する方法について説明しました。似たようなイベントプロシージャにInitializeイベントがあります。Initializeイベントはフォームを表示する直前に実行するイベントとなります。こちらも一緒に覚えておいて下さい。