これは、けっこう有名なテクニックなので簡単に。
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…[×]ボタンで閉じようとした引数CancelにTrueを指定すると、「閉じようとしている動作」が中止されるのでUserFormは閉じられません。