「追加したはずの右クリックメニューが表示されない事件」の真相 ③
先日来、2年越しの事件が解決しそうだ。
infoment.hatenablog.com
今日も、先日の続きから。
右クリックメニューを追加する際、他のマクロで追加された別メニューの有無に関わらず、今までは毎回バツンとリセットしていた。
Sub Test() Dim LoopIndex As Variant For Each LoopIndex In Array(38, 41, 61, 74, 75) With Application.CommandBars(LoopIndex) .Reset .Controls.Add.Caption = "テスト" End With Next End Sub
こうしておかないと、追加するたびにドンドンと増えてしまう。
しかしそれでは、余りに乱暴が過ぎると思っていた。
そこで今回、設定済み右クリックメニューの情報取得と、ピンポイント削除に挑戦してみた。まず、このように設定しておく。
次いでこの中から、「テスト3」だけを消してみよう。
Sub Test2() Dim LoopIndex As Variant Dim CommandBar As CommandBar Dim i As Long For Each LoopIndex In Array(38, 41, 61, 74, 75) With Application.CommandBars(LoopIndex) ' 右クリックメニューを消すたびに段違いが発生する。 ' 対策として、後ろから削除する。 For i = .Controls.Count To 1 Step -1 If .Controls.Item(i).Caption = "テスト3" Then .Controls.Item(i).Delete End If Next End With Next End Sub
結果、テスト3だけを消すことが出来た。
これを応用すれば、追加時は事前に追加済みか否かを確認できるし、終了時も目的のメニューだけを消すことが出来そうだ。
次回に続きます(あと1回か、多くても2回)
参考まで。