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

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つだけは×ボタンが使えるようにするか、隠しコマンドとして特定のラベルをクリックするとユーザーフォームが閉じられるようにする必要があると思いますよ。

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

あわせて読みたい
エクセルを開くと自動的にユーザーフォームが数秒後に開く方法 エクセル住所録などでオリジナル入力画面をユーザーフォームで作っても、そのままではエクセルワークシート上にはありません。 最初の頃は「あれ?どこに行っちゃたのか...
あわせて読みたい
エクセルを開くと自動的にメニューバー(リボンツールバー)を非表示にする方法 エクセルVBAを使って作成したファイルを自分だけで使うならば問題ないのですが、複数のスタッフで共有して使っていると、思いもよらない行動「メニューバー」から操作さ...
あわせて読みたい
エクセルVBAを使ってワークシートにあるシート名の欄を非表示にする方法 エクセルVBAを使って作成したファイルを自分だけで使うならば問題ないのですが、複数のスタッフで共有して使っていると、シート名を直接クリックして移動されてしまうと...
目次