Проще говоря, игра с контекстными меню MS Word через VBA приводит к грязным результатам. Я не уверен, что я делаю неправильно, так как это должно быть просто.
Вот ситуация:
Я создал макрос, который добавит опции для щелчка правой кнопкой мыши, чтобы проверить Google и некоторые другие. другие сайты, такие как Wikipedia и Thesaurus.com, но иногда команда будет добавлена более одного раза, а иногда и вовсе, и меню никогда не будет сброшено. Код с Google ниже (но тот же код для добавления каждого сайта):
Dim DoesGoogleOptionExist As CommandBarControl
Dim ContextControl As CommandBarControl
Application.CommandBars("Text").Reset
Set DoesGoogleOptionExist = Application.CommandBars(CommandBar(CommandBarCounter)).FindControl(Tag:="Google")
If (DoesGoogleOptionExist Is Nothing) Then
Set ContextControl = Application.CommandBars(CommandBar(CommandBarCounter)).Controls.Add(Type:=msoControlButton, Temporary:=True, Before:=1)
With ContextControl
.Caption = "Check &Google.com"
.OnAction = "OpenGoogle"
.Tag = "Google"
.FaceId = 86
End With
Странная вещь здесь: хотя я проверяю, есть ли опция, когда я запускаю макрос, иногда это будет все равно создан заново. Иногда это даже не будет создано один раз. Поэтому я хотел начать все это с нуля. Я сбрасываю меню в начале макроса. Команда сброса не будет сбрасывать меню: опции все еще существуют!
Итак, я сделал быстрый тест: перезагрузите меню и закомментируйте оставшуюся часть кода, чтобы ничего не добавлялось. Так что ничто не должно появиться. Но когда я щелкаю правой кнопкой мыши, все еще там. Я перечисляю опции в VBA, и, конечно же, они все еще в списке:
Dim CommandBarCounter As Integer
For CommandBarCounter = 1 To Application.CommandBars("Text").Controls.Count
Debug.Print Application.CommandBars("Grammar").Controls(CommandBarCounter).Caption
Next CommandBarCounter
Application.CommandBars("Text").Reset
Как Reset не выполняет свою единственную работу должным образом? Почему иногда некоторые параметры дублируются, а иногда они полностью отсутствуют? Я хотел бы (1) сбросить меню, затем (2) добавить каждую опцию только один раз.
Спасибо всем.
Важное редактирование: Новые подробности. Я понял, что работаю в двух разных шаблонах, поэтому иногда пункт меню добавляется к тому или иному шаблону. Не уверен, как это произошло, но сейчас я неявно собираюсь указать, какой шаблон. Я оставлю этот вопрос открытым и без ответа, потому что проблема не совсем решена, поэтому не стесняйтесь добавлять комментарии или решения. Но это само по себе может быть решением, почему вещи не сбрасываются, дублируются или отсутствуют.
Теперь есть новая проблема: в то время как опции добавляются в большинство меню (грамматика, орфография и т. Д. * 1032) *.) не все добавляются в текстовое меню. Это добавляет на два меньше, чем число, которое я добавляю. Так что если я добавлю 4, это действительно добавит 2. Если я добавлю 3, это добавит 1: всегда первый, затем последний (если их больше 3).
Итак, если я добавлю опции к go в словарь, тезаурус, википедию и Google, он добавит словарь и Google (но не средние два). Если я добавлю опции в словарь, тезаурус и википедию, он добавит словарь (но не последние два). Я могу изменить порядок добавленных пунктов меню, но он всегда будет добавлять первый, затем последний, а не средние.
Только текстовое меню. Все остальные меню работают должным образом.
Я проверил это (т.е. убедился, что они были добавлены, но просто невидимы) в VBA.
Объяснений пока нет. Кто-нибудь сталкивался с этим раньше?