「追加したはずの右クリックメニューが表示されない事件」の真相 ③

先日来、2年越しの事件が解決しそうだ。
infoment.hatenablog.com
今日も、先日の続きから。
f:id:Infoment:20200801184556p:plain

右クリックメニューを追加する際、他のマクロで追加された別メニューの有無に関わらず、今までは毎回バツンとリセットしていた。

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

こうしておかないと、追加するたびにドンドンと増えてしまう。
 
f:id:Infoment:20200801185137p:plain

しかしそれでは、余りに乱暴が過ぎると思っていた。
そこで今回、設定済み右クリックメニューの情報取得と、ピンポイント削除に挑戦してみた。まず、このように設定しておく。
 
f:id:Infoment:20200801185641p:plain

次いでこの中から、「テスト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だけを消すことが出来た。
 
f:id:Infoment:20200801221742p:plain

これを応用すれば、追加時は事前に追加済みか否かを確認できるし、終了時も目的のメニューだけを消すことが出来そうだ。

次回に続きます(あと1回か、多くても2回)

参考まで。