構文
構文は以下の通りです。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' 処理内容をここに書きます
End Sub
' 処理内容をここに書きます
End Sub
解説
UserForm_QueryCloseは、ユーザーフォームが閉じられる直前に実行されるイベントです。このイベントを使って、フォームが閉じられる直前に何か特定の処理を自動的に行うことができます。Cancelは、閉じる動作をキャンセルするかどうかを制御します。Cancel = Trueにすると、フォームは閉じられません。CloseModeは、フォームがどのように閉じられたかを示します。例えば、vbFormControlMenuは、フォームの[×]ボタンが押されたことを意味します。
【CloseModeの種類】
定数 | 値 | 内容 |
vbFormControlMenu | 0 | フォームの[×]ボタンがクリックされて閉じられた場合 |
vbFormCode | 1 | コードからフォームが閉じられた場合 |
vbAppTaskManager | 2 | タスクマネージャーからフォームが終了させられた場合 |
vbFormMDIForm | 3 | MDI親フォームが閉じられた場合 |
プログラミング例
具体的なプログラミング例を紹介します。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim 確認 As Integer
確認 = MsgBox("本当にこのフォームを閉じますか?", vbYesNo + vbQuestion, "確認")
If 確認 = vbNo Then
Cancel = True
MsgBox "フォームの閉じる動作がキャンセルされました。", vbInformation
Else
' 必要な自動処理をここに追加
MsgBox "フォームを閉じる前に自動処理が実行されました。", vbInformation
End If
End Sub
Dim 確認 As Integer
確認 = MsgBox("本当にこのフォームを閉じますか?", vbYesNo + vbQuestion, "確認")
If 確認 = vbNo Then
Cancel = True
MsgBox "フォームの閉じる動作がキャンセルされました。", vbInformation
Else
' 必要な自動処理をここに追加
MsgBox "フォームを閉じる前に自動処理が実行されました。", vbInformation
End If
End Sub
上記のプログラムでは、ユーザーがフォームを閉じようとしたときにメッセージボックスを表示し、「いいえ」が選ばれた場合はフォームの閉じる動作をキャンセルします。逆に「はい」が選ばれた場合は、フォームを閉じる前に自動処理を行います。
まとめ
UserForm_QueryCloseイベントは、ユーザーフォームが閉じられる直前に実行されるため、フォームを閉じる前に何かを確認したり、特定の処理を行うために非常に便利です。Cancel引数を使って、フォームの閉じる動作をキャンセルできるため、ユーザーの誤操作を防ぐことができます。