「追加したはずの右クリックメニューが表示されない事件」の真相 ⑤
先日来、2年越しの事件が解決しそうだ。
infoment.hatenablog.com
先日は、追加しようとする右クリックメニューが追加済みでない場合に限り、追加を実行するところまで作成した。
今日は、前回の続きから。
用が済めば、後片付けが必要だ。
そこで、右クリックメニューを削除する方法として、以下の二つを準備してみた。
- 指定した右クリックメニューを削除
- 一括リセット
実際に作成したのが、こちら。
クラスモジュールの一部(RightClickCommand)
今回は、抜粋で掲載。コードの全文は最終回にまとめて掲載としよう。
↓削除する場合。
' 指定CommandBarから指定メニュー削除。 Public Sub DelMenuFromSpecifiedCommandBar(name_to_del As String, _ commandbar_index As Long) ' 指定メニューが存在する場合のみ、それを削除する。 ' ※既存の標準メニューも消せるため注意。 ' ※DuplicateFlagのiを、そのまま削除に用いる。 If DuplicateFlag(name_to_del, commandbar_index) Then Application.CommandBars(commandbar_index).Controls.Item(i).Delete End If End Sub ' 各CommandBarから指定メニュー削除。 Public Sub DelMenu(name_to_del As String) For Each LoopIndex In TargetArray DelMenuFromSpecifiedCommandBar name_to_del, CLng(LoopIndex) Next End Sub
↓リセットする場合。
' リセット。 Public Sub ResetMenu() For Each LoopIndex In TargetArray Application.CommandBars(LoopIndex).Reset Next End Sub
リセットする方が、断然スッキリしている。
ただし、消してはいけないものがあったとしても全て消えてしまうので、要注意。
標準モジュール
使用例がこちら。
' 個別削除の場合。 Sub Test_Delete() With New RightClickCommand .DelMenu "ホゲ" .DelMenu "ホげ" .DelMenu "ほげ" End With End Sub
' 一括リセットの場合。 Sub Test_Reset() With New RightClickCommand .ResetMenu End With End Sub
これで、準備は整った。後は、実際の業務で使ってみるだけだ。
ところが実際に使ってみると・・・ん?何かがおかしい。
そう、既にお気づきの方も居られると思うが、このクラスモジュールには、単純で重大な欠陥があったのだ。
ということで次回、最終回に続きます。
参考まで。