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

Excel-VBA ユーザーフォーム
スポンサーリンク

ユーザーフォームのボタン非表示か使えなくしたいと思ったことありませんか?

入力や検索などでオリジナルフォームでエクセルを操作するように、ユーザーフォームを作ったのに制作者が想定していない操作をされてしまい、マクロエラーなどに遭遇した経験ありませんか?

よくあるトラブルで、エクセル住所録を作った時にフォームに従って操作していけば、何の問題もなかったのですが、ユーザーフォームの右上の×ボタンを押されてしまい、動作ができなくなってしまったとスタッフに言われた経験がありました。

残念ながら×ボタン消せそうにないので、機能停止させましょう。

スポンサーリンク

ユーザーフォームの×ボタンを機能停止する

まず始めに、×ボタンを使えなくするユーザーフォーム自体を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

VBA解説
  1. ユーザーフォームが閉じられる直前に実行する
  2. もし×ボタンを押されたら
  3. 「【Close】ボタンを使用してください」と表示する
  4. ユーザーフォームを閉じる処理をキャンセルする
  5. Ifステートメント終了
  6. マクロ終了

このようにユーザーフォームにVBAコードを書くと、ボタンを押すとこのように表示されます。

OKを押すと表示中のユーザーフォームに戻ります

こうすることにより、必ずフォーム上のコマンドボタンを押さないと何も操作できなくすることができるので、うっかりフォームを消してしまったりされることはなくなります。

スポンサーリンク

全て×ボタン機能停止はキケン!

ユーザーフォームのボタンが使えなく設定すると、必ず意図した操作でないとプログラムが動かなくなるので、ついつい全部のユーザーフォームにVBAコードを書いてしまうと思わぬトラブルに遭います。

マクロエラー時に調べるためにワークシートを直接見なくてはいけない時に、全てのユーザーフォームのボタンが使えなくて困った経験があります。

その為にメインメニューとなるユーザーフォーム1つだけは×ボタンが使えるようにするか、隠しコマンドとして特定のラベルをクリックするとユーザーフォームが閉じられるようにする必要があると思いますよ。

またボタン機能停止の他に意図しない操作をされないように、タイマー設定して自動的にフォームを開いたり、エクセル画面の上にあるリボンやシート自体を非表示にしてしまう事も、誤操作を回避する手段としては有効ですよね。