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

Excel-VBA ユーザーフォーム

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

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

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

この×ボタン消せないかなあ?って思いませんでしたか?

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

スポンサーリンク

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

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

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

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

ただし、全てのユーザーフォームに✖ボタン機能停止させてしまうと、ワークシートを触りたい時に何もできなくなってしまうので、メインメニューぐらいは残しておいた方が良いと思います。

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

タイトルとURLをコピーしました