メニューバーのリセット機能を止めるには?

Question 23.3 Previous Next
標準のメニューバーを削除して、新しいメニュー項目を追加したのですが、メニューバーの所で右クリックができてしまい、標準のメニューバーの内容が表示されてしまいます。
メニューバーで右クリックができないようにする方法を教えて下さい。よろしくお願い致します。
Answer   Copyright (C) 1999.12.14 永井善王
ショートカットメニュー メニューバーにマウスを合せて右クリックすると、左図のようなショートカットメニューが表示されます。
そして、「ユーザー設定」をクリックすると、下図のダイアログボックスが表示されます。
ダイアログボックス
続いて、「ワークシートメニューバー」をチェックしてから、 「リセット」ボタンをクリックすると、カスタマイズしていたメニューバーが標準メニューバーにリセットされます。

この機能を止めるために、右クリックを無効にしたい という ご質問ですね。

右クリックを無効にする方法が、こちらのページに 掲載してありますが、 その対象は Excel のクライアント領域に限られています。少々込み入った話になってしまいますが、Excel が表示する画面は、クライアント領域と非クライアント領域で構成されています。
クライアント領域とは、手っ取り早く言うとワークシート部分が表示される領域です。 そして、非クライアント領域とは、メニューバーや最大/最小化ボタンなどが表示される領域です。

この非クライアント領域については、VBAマクロで操作可能なものもありますが、Windows API を利用しないとできないものと、どう しようもないものがあるようです。 私は、ここまで深い部分についての知識は持ち合せてないので、取り急ぎ調べてみましたが、 タイトルバーの左端にある「コントロールメニュー」ボックスを削除する方法などは見られたものの、右クリックを無効にする方法は見当たりませんでした。

「右クリックを無効にしたい」というニーズは理解できます。 せっかくマクロで作業を自動化しているのに、ユーザーに勝手に操作されたのでは、マクロエラーなどの予期せぬ事態が発生して、立ち往生してしまう場合があります。「ユーザーが操作できないようにしておけば、うまく行くのに」と思った経験は、私にもあります。

そこで、メニューをカスタマイズして、ユーザーの操作を制約してしまおうと考える訳です。しかし、よく考えると、ユーザーの操作を禁止しても、自分は操作できるようにしておく必要があります。
なぜならば、例えば「ファイル」メニューを消しておけば、ユーザーによって不用意にファイルを上書き保存されることは、なくなるでしょうが、自分も保存できなくなってしまいます。
いたちごっこ
当然、自分のために消しておいたメニューを復元する手段を、用意しておくことになります。「知っているのは私だけ」とはいかないでしょうから、隠しても隠しても誰かにいじられてしまう「イタチごっこ」が始まります。
よって、メニューをカスタマイズする場合は、ユーザー本位で進みましょう。つまり、ユーザーの混乱を避けるために消しておくという発想です。ユーザーの利便性を奪う程に消してしまうと、イタチごっこの可能性が高まります。メニューバーの上で右クリックする人は、Excel をかなり知っている人でしょうし、同時に他のブックを開いて作業している場合も、あるでしょうから。

では、不慣れな人が不用意に触ってしまう危険性への対策は、どうすれば良いのでしょうか。
ユーザーが少人数なら事前に説明して、触らないようにしてもらいましょう。多人数で周知徹底がむつかしい場合は、ワークシートのどこかに注意書きしておくか、ブックを開くと同時にメッセージボックスで知らせるか、などが考えられます。
どうしても絶対に触らせないようにしたい場合は、VBAではなくてVBで開発することが必要かも知れません。
なぜならば、ユーザーは次にはマクロを触るかも知れませんね。

 

Excel VBA Macro