Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » メニューが複数追加されないように

メニューが複数追加されないように

対象:Excel97,Excel2000,Excel2002,Excel2003

メニューをカスタマイズするマクロをご紹介しました。

実際に試してみた方はお気づきのはずですが、あのマクロにはちょっとした問題があります。

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

End Sub

上記のコードでは、
「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)などが入っています。

動作の違いをご確認ください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » メニューが複数追加されないように

「Applicationオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.
.