Sub AddMenu()
Dim NewM As Variant, NewC As Variant
''新しいメニューを追加する
Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
NewM.Caption = "新しいメニュー(&C)"
''オリジナルコマンドを追加する(1)
Set NewC = NewM.Controls.Add
With NewC
.Caption = "保護解除(&U)"
.OnAction = "UnProtectSheet"
.BeginGroup = False
.FaceId = 277
End With
''オリジナルコマンドを追加する(2)
Set NewC = NewM.Controls.Add
With NewC
.Caption = "参照元/先のトレース(&P)"
.OnAction = "Precedents"
.BeginGroup = True
.FaceId = 450
End With
End Sub
Excel のメニューバーは「Worksheet Menu Bar」という名前の CommandBar オブジェクトです。Add メソッドでコントロールを追加できます。引数 Type に msoControlPopup を指定すると、サブメニュー項目を持つメニュー コマンドが追加されます。
変数 NewM に新しく追加したメニューが格納されていますので、メニューにコマンドを追加するには「NewM.Controls.Add」とします。クリックすると実行される一般的なコマンドを追加するときは、引数
Type を指定する必要はありません。
Sub AddMenu()
Dim NewM As Variant, NewC As Variant
''新しいメニューを追加する
Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
NewM.Caption = "新しいメニュー(&C)"
''オリジナルコマンドを追加する(1)
Set NewC = NewM.Controls.Add
With NewC
.Caption = "保護解除(&U)"
.OnAction = "UnProtectSheet"
.BeginGroup = False
.FaceId = 277
End With
''オリジナルコマンドを追加する(2)
Set NewC = NewM.Controls.Add
With NewC
.Caption = "参照元/先のトレース(&P)"
.OnAction = "Precedents"
.BeginGroup = True
.FaceId = 450
End With
''オリジナル サブメニューを追加する
Set NewC = NewM.Controls.Add(Type:=msoControlPopup)
With NewC
.Caption = "標準に戻す"
.BeginGroup = True
With NewC.Controls.Add()
.Caption = "シートの外観(&S)"
.OnAction = "SheetStyle"
.FaceId = 8
End With
''オリジナル サブメニューのコマンドを追加する
With NewC.Controls.Add()
.Caption = "文字色(&T)"
.OnAction = "DefaultFontColor"
.FaceId = 476
End With
End With
End Sub
このようなオリジナルメニューは、標準のメニューバーだけでなくツールバーに追加することもできます。
Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
の「Worksheet Menu Bar」に追加したいメニューバーの名前を指定すれば OK です。なお、ツールバーにテキスト ボックスやコンボ
ボックスを追加するテクニックは「ツールバーでテキスト
ボックスを使う」を参照してください。