メニューをカスタマイズするマクロをご紹介しました。
実際に試してみた方はお気づきのはずですが、あのマクロにはちょっとした問題があります。
CustomizeMenuBarマクロを複数回実行すると、実行した回数分のメニュー項目が追加されてしまうのです。
複数回実行されることを想定した処理を入れておくほうがいいでしょう。
※既に[テスト_メニューの追加]が追加されているときは削除する処理入り
Sub CustomizeMenuBar()
Dim objCB As CommandBar
Dim objCBCtrl As CommandBarControl
Set objCB = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
objCB.Controls("テスト_メニューの追加").Delete
On Error GoTo 0
Set objCBCtrl = objCB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
objCBCtrl.Caption = "テスト_メニューの追加"
With objCBCtrl
.Controls.Add Type:=msoControlButton
With .Controls(1)
.Caption = "テスト_コマンド"
.OnAction = "TestCmd"
End With
End With
上記のコードでは、
「Set objCBCtrl = objCB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
objCBCtrl.Caption = "テスト_メニューの追加"」
で、[テスト_メニューの追加]を追加をする前に、
「objCB.Controls("テスト_メニューの追加").Delete」
で、[テスト_メニューの追加]を削除しています。
ただし、[テスト_メニューの追加]が存在しないときに、
「objCB.Controls("テスト_メニューの追加").Delete」
が実行されるとエラーとなってしまうので、その前に
「On Error Resume Next」
を入れてエラーを無視するようにし、[テスト_メニューの追加]の削除が終わったらエラー無視を解除するために、
「On Error GoTo 0」
を入れています。
▼サンプルファイル(002963.xls 39KByte)ダウンロード
サンプルファイルには、上記のCustomizeMenuBarマクロの他、先日ご紹介した事前削除処理の入っていないマクロ(OLD_CustomizeMenuBar)などが入っています。
動作の違いをご確認ください。
- Newer:グリッド線の設定は?-ページレイアウト-配置
- Older:選択したスライドに適用がない−複数マスタ
Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » メニューが複数追加されないように