- ベストアンサー
Excel VBA メニューバー内の各項目の enable/disable変更
Excel VBA を用いて Excelのメニューバーの各項目の enable/disable 状態を変更する事は可能でしょうか? (「編集」-「貼り付け」の許可/禁止の切り替えなど) ご存知の方、教えてください。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Office 2003までに限られますが、 '標準モジュール Sub Test1() Call MenuVisible(False) 'Off--False, On--True End Sub ' Sub MenuVisible(flg As Boolean) With Application .CommandBars("Worksheet Menu Bar").Controls("編集(&E)") _ .Controls("貼り付け(&P)").Enabled = flg '編集メニュー .CommandBars("Cell").FindControl(, 22).Enabled = flg '右クリックメニュー If flg Then Application.OnKey "^v" Else Application.OnKey "^v", "Dummy" 'ショートカットを無効 End If End With End Sub ' Private Sub Dummy() Application.CutCopyMode = False End Sub '------------------------------------------- '起動時は、 Sub Auto_Open() Call MenuVisible(False) End if '終了する場合は、 Sub Auto_Close() Call MenuVisible(True) End if '------------------------------------------- とすれば可能です。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 返事が遅くなりました。 >FindControl(, 22)の引数の設定方法が調べたのですがわかりませんでした。 「22」は右クリックメニューの「編集」のことだと思いますが、数字の取得方法、もしくは一覧表のような物はあるのでしょうか。 こういう質問をする人は、何年ぶりでしょうか?こういう質問は、大歓迎です。 私が、入門当事は、本の巻末に出ていましたので、それを参考にしました。しかし、私がマクロで作りましたので、ここに出しておきます。それを、ブックにコントロールリストにしても良いと思います。(ほかにも、エラーリストがマクロで出せます。Err.Number と、Err.Description で、1から10000ぐらいをループさせるだけですが。) このマクロは、時間が掛かります。 '------------------------------------------- 'メニューコントロール一覧リスト作成 Sub ControlListsShowup() Dim c As Variant Dim n As Variant Dim i As Long Application.ScreenUpdating = False On Error Resume Next Cells(1, 1).Resize(, 3).Value = Array("CommandBar", "Control", "ID") i = 2 For Each c In CommandBars Cells(i, 1).Value = c.Name For Each n In c.Controls Cells(i, 2).Value = n.Caption Cells(i, 3).Value = n.ID i = i + 1 Next n Next c On Error GoTo 0 Application.ScreenUpdating = True End Sub '------------------------------------------- 今回の質問というのは、少し特殊で、抜け落ちは許さないという種類のものだと思います。その場合は、「編集」というキャプションをすべて探します。 >又、第1引数は省略しない場合は何を設定するものなのでしょうか。 第1引数は、MsoControlType とヘルプには出ていますが、msoControlButtonなどの種類で、それは、規定のコントロールの場合は指定する必要がありません。 expression.FindControl(Type, Id, Tag, Visible, Recursive) 次のTag というのは、ユーザーが設定したメニューコマンドの場合に、Add で設定するときに、ついでにTag にユニークな名前をつけておいて、後で、変更したり、メニューを解除したりするときに、そのTag で呼び出します。他は、使ったことがありません。
お礼
早速の回答ありがとうございます。 メニューコントロール一覧のリストを出力することができました。 一覧表を用いて確認することにより「抜け落ち」を防ぐことができますね。 初心者にも親切な回答をありがとうございました。
お礼
年末のお忙しい中、早速の回答ありがとうございます。 教えていただいた方法で試してみます。
補足
ありがとうございます。 編集メニュー&右クリックメニューのロックができました。 そこで、補足で教えて下さい。 右クリックメニューのロックで使用している FindControl(, 22)の引数の設定方法が調べたのですがわかりませんでした。 「22」は右クリックメニューの「編集」のことだと思いますが、数字の取得方法、もしくは一覧表のような物はあるのでしょうか。 又、第1引数は省略しない場合は何を設定するものなのでしょうか。 申し訳ありませんが、ご教示下さい。お願い致します。