即効テクニック |
メニューバーに独自のメニューを追加するには、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メソッドを実行すると、他のマクロやアドインが追加したメニューやコマンドもすべて削除されてしまうからです。 メニューは、あなただけのものではありません。 他のマクロやアドインなどがメニューを操作する可能性も十分に考慮して、メニューの追加や削除は慎重に行うようにしてください。 なお、手動操作でメニューを初期状態に戻すには、[ツール]メニューの[ユーザー設定]を実行し、表示される[ユーザー設定]ダイアログボックスで[ツールバー]タブを開きます。 [ツールバー]リストで「ワークシートメニューバー」を選択して、[リセット]ボタンをクリックすると、メニューが初期化されて元の状態に戻ります。