エクセルVBAでユーザーフォームを閉じるボタンで閉じられなくする!

エクセルでユーザーフォームを作った時、誤って閉じるボタンで閉じてしまった!という事はないでしょうか。もう一度、開き直すのは面倒です。不用意に、ユーザーフォームの×ボタンから、フォームを閉じたくない! といった場合に、エクセルVBAで、ユーザーフォームを閉じるボタンで、閉じられなくする方法があります。QueryCloseイベントで、ユーザーフォームが閉じる直前に、閉じるのをキャンセルします。ここでは、ユーザーフォームの×ボタンを無効にする、方法を2つ紹介しています。1つは、引数CloseModeに、ユーザーフォームの閉じる方法を指定して、×ボタンから閉じられなくしています。もう1つは、引数CloseModeに値を指定して、×ボタンからユーザーフォームを閉じられなくしています。

 

 

ユーザーフォームの閉じるボタンを無効にする

エクセルVBAで、ユーザーフォームを閉じる時、閉じるボタンから閉じられないようにしましょう。

引数 CloseModeに、「ユーザフォームの閉じる方法」を指定します。

   vbFormControlMenu  : 右上の「×」ボタンがクリックされた時(値は0)

   vbFormCode     : VBAコードから Unloadが実行された時(値は1)

×ボタンで閉じられなくする

ユーザーフォームの閉じるボタンをクリックした時、フォームを閉じられなくするコードです。

引数 CloseModeに、vbFormControlMenuを指定します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub

 

 

×ボタンをクリックした時にメッセージを表示する

ユーザーフォームを閉じるボタンをクリックした時、メッセージを表示するコードです。

引数 CloseModeに、vbFormControlMenuを指定します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox “終了ボタンをクリックして下さい。”
Cancel = True
End If
End Sub

CloseModeに値を指定して閉じるボタンを無効にする

引数 CloseModeに値を指定して、ユーザーフォームを閉じるボタンで、閉じられなくします。

   0 :  「×」ボタンをクリックした時

   1 :  コードから Unloadステートメントが実行された時

   2 :  Windowsが終了した時

   3 :  タスクマネージャによって閉じられた時

 

 

×ボタンで閉じられなくする

引数 CloseModeに「0」を指定して、ユーザーフォームを閉じるボタンで、閉じられなくするコードです。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = True
End If
End Sub

×ボタンをクリックした時にメッセージを表示する

ユーザーフォームを閉じるボタンをクリックした時、メッセージを表示するコードです。

引数 CloseModeに「0」を指定します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox “終了ボタンをクリックして下さい。”
Cancel = True
End If
End Sub

 

 

QueryCloseイベント

UserForm が閉じる直前に発生するのが、QueryCloseイベントです。

引数 CloseModeは、どんな方法でユーザーフォームを閉じようとしているのか分かります。

引数 Cancelは、閉じる動作を指定できます。Cancelに Trueを指定すると、閉じるのを中止できます。

ユーザーフォームの閉じるボタンの対策法

ユーザーフォームを、閉じるボタンで閉じられなくすると、どうやってユーザーフォームを閉じるの? といった疑問が湧いてしまします。だったら、ユーザーフォームを他のフォームに移動させる! ユーザーフォームを閉じる!そういったボタンを作成すればいいです。もしくは、ファイルを終了させるボタンを作成すれば、問題は解決します。もちろん、それはエクセルVBAで作成できます。エクセルVBAで、ユーザーフォームを閉じるボタンで閉じられなくすると、うっかり、誤ってボタンを押してしまって、閉じてしまったという失敗が防げます。ボタンで、操作をコントロールすると、不要な動作を制御できます。

こちらの記事もご覧ください。⇒エクセルVBAでユーザーフォームを開く、閉じる