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


これは、けっこう有名なテクニックなので簡単に。

UserFormを閉じるために[キャンセル]ボタンを用意し、[キャンセル]ボタンがクリックされたら何らかの後処理をするとします。しかし、ユーザーが[×]ボタンをクリックしてUserFormを閉じた場合は、この後処理が行われません。それでは困ります。[×]ボタンでUserFormを閉じられないようにするには、次のようにします。

UserFormが閉じる直前には、QueryCloseイベントが発生します。このとき、まだUserFormが閉じていない点に注目してください。QueryCloseイベントには、引数Cancelと、引数CloseModeが用意されています。引数CloseModeは、どんな方法でUserFormを閉じようとしているのかがわかり、引数Cancelは「閉じようとしている動作」を中止するかどうかを指定できます。つまり、引数CloseModeを調べて[×]ボタンが押された場合に、「閉じようとしている動作」を中止してやればいいのです。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        MsgBox "[×]ボタンでは閉じられません。", 48
        Cancel = True
    End If
End Sub

引数CloseModeは、閉じようとした手段により次の値を返します。

0…[×]ボタンで閉じようとした
1…Unloadステートメントなどコードで閉じようとした
2…Windowsが終了した
3…タスクマネージャによって閉じられた

引数CancelにTrueを指定すると、「閉じようとしている動作」が中止されるのでUserFormは閉じられません。