構文
構文は以下の通りです。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' フォームが閉じられる直前に呼び出されるイベント
' CloseModeパラメータは、フォームを閉じる方法を示す定数を取ります
If CloseMode = vbFormControlMenu Then
' [X]ボタン(Closeボタン)による閉じる動作
' このブロック内の処理が実行されます
End If
End Sub
' フォームが閉じられる直前に呼び出されるイベント
' CloseModeパラメータは、フォームを閉じる方法を示す定数を取ります
If CloseMode = vbFormControlMenu Then
' [X]ボタン(Closeボタン)による閉じる動作
' このブロック内の処理が実行されます
End If
End Sub
解説
UserForm_QueryCloseイベントは、UserForm(ユーザーフォーム)が閉じられる際に発生するイベントです。このイベントは、ユーザーフォームが閉じられる前に特定のアクションを実行するために使用されます。具体的には、UserFormが閉じられる前にユーザーに確認メッセージを表示したり、フォームを閉じる操作を中止したりすることができます。UserForm_QueryCloseイベントには引数があります。
引数 | 内容 |
Cancel | この引数を使用してユーザーフォームの閉じる操作を中止するかどうかを制御します。「True」に設定することによって、フォームの閉じる操作を中止し、「False」に設定することによってフォームを閉じます。 |
CloseMode | フォームがどの方法で閉じられたかを示す値を格納します。この値によって、フォームの閉じられ方を判別できます。幾つかの値が格納されますが、フォームの [×]ボタンをクリックした場合や、システムメニューの[閉じる]を選択した場合などには、「vbFormControlMenu」が設定されます。 |
使い方
具体的な使い方について紹介します。
If CloseMode = vbFormControlMenu Then
Dim response As VbMsgBoxResult
response = MsgBox("フォームを閉じますか?", vbYesNo + vbQuestion, "確認")
If response = vbNo Then
Cancel = True ' フォームを閉じないようにキャンセル
End If
End If
Dim response As VbMsgBoxResult
response = MsgBox("フォームを閉じますか?", vbYesNo + vbQuestion, "確認")
If response = vbNo Then
Cancel = True ' フォームを閉じないようにキャンセル
End If
End If
上記の例では、フォームが[×]ボタンをクリックされた時に、確認ダイアログを表示してユーザーに閉じるかどうかの選択を促します。vbFormControlMenuの場合にのみ、確認ダイアログが表示されるようになっています。
プログラミング例
以下に、QueryCloseイベント使った[X]ボタンを無効化する例を紹介します。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "フォームを[X]ボタンで閉じることはできません。", vbExclamation, "警告"
Cancel = True
End If
End Sub
If CloseMode = vbFormControlMenu Then
MsgBox "フォームを[X]ボタンで閉じることはできません。", vbExclamation, "警告"
Cancel = True
End If
End Sub
まとめ
vbFormControlMenuを利用することで、ユーザーがフォームを閉じる際に確認ダイアログを表示することができます。これにより、誤ってフォームを閉じることを防止し、より安全なユーザーエクスペリエンスを提供することができます。是非活用してください。