即効テクニック

メニューバー・ツールバー関連のテクニック

独自のメニューを追加する

(Excel 97/2000/2002/2003)
メニューバーに独自のメニューを追加するには、CommandBarコントロールを操作します。
標準メニューの名前は「Worksheet Menu Bar」です。
[ファイル]や[編集]など、メニューバーに表示される全項目はControlsコレクションで表されますので、新しいメニューを追加するときは、このControlsコレクションのメンバーをAddメソッドで追加します。
このとき、メニューの種類として「クリックするとサブメニューを表示する」タイプを選択しますので、引数Typeに、定数「msoControlPopup」を指定します。

[ヘルプ]メニューの右に、新しく[Test]メニューを追加するには次のようにします。

Sub Sample1()
    Dim NewMenu
    Set NewMenu = Application.CommandBars("Worksheet Menu Bar").Controls. _
                                                     Add(Type:=msoControlPopup)
    NewMenu.Caption = "Test"
End Sub
これだけでは[Test]メニューをクリックしても、まだ何も表示されませんので、[Test]メニューにコマンドを登録します。 ここでは[コマンド1]と[コマンド2]を登録してみましょう。 また、それぞれのコマンドがクリックされたときに実行されるプロシージャもあらかじめ用意しておきます。 ここでは[コマンド1]がクリックされたときに「Sub Proc1」が実行され、[コマンド2]がクリックされたときに「Sub Proc2」が実行されるようにします。 上記Sample1によって[Test]メニューが登録されている状態で、下記Sample2を実行してください。
Sub Sample2()
    Dim NewCommand
    Set NewCommand = Application.CommandBars("Worksheet Menu Bar"). _
                                                Controls("Test").Controls.Add()
    NewCommand.Caption = "コマンド1"
    NewCommand.OnAction = "Proc1"
    Set NewCommand = Application.CommandBars("Worksheet Menu Bar"). _
                                                Controls("Test").Controls.Add()
    NewCommand.Caption = "コマンド2"
    NewCommand.OnAction = "Proc2"
End Sub

Sub Proc1()
    MsgBox "Proc1"
End Sub

Sub Proc2()
    MsgBox "Proc2"
End Sub
実行すると、[Test]メニューに2つのコマンドが登録されます。 登録したメニューを削除するには、Deleteメソッドを実行します。 次のコードは、[Test]-[コマンド2]を削除します。
Sub Sample3()
    Application.CommandBars("Worksheet Menu Bar").Controls("Test"). _
                                                   Controls("コマンド2").Delete
End Sub
同様に、[Test]メニューを削除するには次のようにします。
Sub Sample4()
    Application.CommandBars("Worksheet Menu Bar").Controls("Test").Delete
End Sub
メニューを削除するとき、削除したいメニューが存在しないとエラーが発生します。 削除対象のメニューが存在するかどうかを事前に確認するか、万が一メニューが存在しないことを想定して、次のようにエラーを無視するといいでしょう。
Sub Sample5()
    On Error Resume Next
    Application.CommandBars("Worksheet Menu Bar").Controls("Test").Delete
End Sub
自分が追加したメニューやコマンドを削除するとき、メニューを初期化するためのResetメソッドは、できるだけ使わないようにしてください。 Resetメソッドを実行すると、他のマクロやアドインが追加したメニューやコマンドもすべて削除されてしまうからです。 メニューは、あなただけのものではありません。 他のマクロやアドインなどがメニューを操作する可能性も十分に考慮して、メニューの追加や削除は慎重に行うようにしてください。 なお、手動操作でメニューを初期状態に戻すには、[ツール]メニューの[ユーザー設定]を実行し、表示される[ユーザー設定]ダイアログボックスで[ツールバー]タブを開きます。 [ツールバー]リストで「ワークシートメニューバー」を選択して、[リセット]ボタンをクリックすると、メニューが初期化されて元の状態に戻ります。