
ユーザーフォームの【×】ボタンを使えなくする

ユーザーフォームの✖ボタン非表示か使えなくしたいと思ったことありませんか?
入力や検索などでオリジナルフォームでエクセルを操作するように、ユーザーフォームを作ったのに制作者が想定していない操作をされてしまい、マクロエラーなどに遭遇した経験ありませんか?
よくあるトラブルで、エクセル住所録を作った時にフォームに従って操作していけば、何の問題もなかったのですが、ユーザーフォームの右上の×ボタンを押されてしまい、動作ができなくなってしまったとスタッフに言われた経験がありました。
残念ながら×ボタン消せそうにないので、機能停止させましょう。

ユーザーフォームの×ボタンを機能停止する
まず始めに、×ボタンを使えなくするユーザーフォーム自体をVBA画面でクリックします。

ユーザーフォームをクリックするとVBAコードが入力できる画面に変わります。

表示された「Private Sub UserForm_Click()~End Sub」をすべて消して、×ボタンを押した時にメッセージも合わせて表示でいるように、下記コードに差し替えます。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox “【CLOSE】ボタンを使用してください”
Cancel = True
End If
End Sub
- ユーザーフォームが閉じられる直前に実行する
- もし×ボタンを押されたら
- 「【Close】ボタンを使用してください」と表示する
- ユーザーフォームを閉じる処理をキャンセルする
- Ifステートメント終了
- マクロ終了
このようにユーザーフォームにVBAコードを書くと、✖ボタンを押すとこのように表示されます。

こうすることにより、必ずフォーム上のコマンドボタンを押さないと何も操作できなくすることができるので、うっかりフォームを消してしまったりされることはなくなります。
全て×ボタン機能停止はキケン!
ユーザーフォームの✖ボタンが使えなく設定すると、必ず意図した操作でないとプログラムが動かなくなるので、ついつい全部のユーザーフォームにVBAコードを書いてしまうと思わぬトラブルに遭います。
マクロエラー時に調べるためにワークシートを直接見なくてはいけない時に、全てのユーザーフォームの✖ボタンが使えなくて困った経験があります。
その為にメインメニューとなるユーザーフォーム1つだけは×ボタンが使えるようにするか、隠しコマンドとして特定のラベルをクリックするとユーザーフォームが閉じられるようにする必要があると思いますよ。
また✖ボタン機能停止の他に意図しない操作をされないように、タイマー設定して自動的にフォームを開いたり、エクセル画面の上にあるリボンやシート自体を非表示にしてしまう事も、誤操作を回避する手段としては有効ですよね。


