教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでフォームの[X]ボタンでフォームを閉じられない様にする方法

構文

構文は以下の通りです。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "このフォームは[X]ボタンで閉じることができません。"
    End If
End Sub

解説

UserForm_QueryCloseは、フォームが閉じられようとしたときに発生します。特に、フォームの[X]ボタンがクリックされた場合や、プログラムからフォームが閉じられる場合に呼び出されます。Cancelは、閉じる動作をキャンセルするかどうかを制御します。Trueに設定すると、フォームは閉じられません。CloseModeは、どの方法でフォームが閉じられようとしているかを示します。vbFormControlMenuは、フォームの[X]ボタンがクリックされたことを示します。

【CloseModeの種類】

定数 内容
vbFormControlMenu 0 フォームの[×]ボタンがクリックされて閉じられた場合
vbFormCode 1 コードからフォームが閉じられた場合
vbAppTaskManager 2 タスクマネージャーからフォームが終了させられた場合
vbFormMDIForm 3 MDI親フォームが閉じられた場合

プログラミング例

具体的なプログラミング例を紹介します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "このフォームは[X]ボタンで閉じることができません。"
    End If
End Sub

上記のプログラムを使用することで、ユーザーが誤ってフォームを閉じてしまうのを防ぐことができます。

まとめ

UserForm_QueryCloseイベントを使用することで、フォームが閉じられる際の動作を制御できます。CloseModeがvbFormControlMenuのときに、CancelをTrueに設定すると、フォームの[X]ボタンで閉じることができなくなります。