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