CommandBars («Текст»). Элементы управления не удаляются при выходе из документа - надстройка слова VBA - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь создать надстройку для MS Word с VBA. Он имеет процедуру «AutoExec», которая создает новый элемент в коллекции CommandBar («Текст») (меню правой кнопки мыши) и «AutoExit», который удаляет этот созданный элемент. В качестве примера я попробовал приведенный ниже код, который создает элемент «Сколько страниц?», Который выполняет макрос, отображающий количество страниц в активном документе.

Это код AutoExec:

Public Sub AutoExec() 
Dim objcommandbutton As CommandBarButton 
   Call MsgBox("AutoExec") 
   Set objcommandbutton = Application.CommandBars("Text").Controls.Add _ 
                                      (Type:=msoControlButton, Before:=1) 
   objcommandbutton.Caption = "How Many Pages?" 
   objcommandbutton.OnAction = "HowManyPages" 
End Sub 

Это код автоматического выхода:

Public Sub AutoExit() 
Dim objcommandbutton As CommandBarControl 
   Call MsgBox("AutoExit") 
   For Each objcommandbutton In Application.CommandBars("Text").Controls 
      If objcommandbutton.Caption = "How Many Pages?" Then 
         objcommandbutton.Delete 
      End If 
   Next objcommandbutton 
End Sub

Это основной код макроса:

Public Sub HowManyPages() 
   If Documents.Count > 0 Then 
      Call MsgBox(ActiveDocument.BuiltInDocumentProperties("Number of Pages")) 
   Else 
      Call MsgBox("No document is currently active.") 
   End If 
End Sub 

При выходе из документа кнопка, ранее добавленная в коллекцию CommandBars («Текст»), не удаляется. Я вижу это, когда открываю новый пустой документ Word, и кнопка остается в меню правой кнопки мыши.

Я знаю, что процедура выполняется правильно, потому что есть инструкция MsgBox, чтобы проверить это. Это происходит только с подпрограммой AutoExit надстройки, то есть загруженной как надстройка: выполнение кода в макросе с модулем vba работает нормально.

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я решил свою проблему с помощью обходного пути:

Я пытался «добавить» шаблон (.dotm) в качестве надстройки (в окне «Шаблоны и надстройки»), чтобы использовать мойПроект VBA в новом документе.Вот почему я использовал процедуры AutoExec() и AutoExit().Но только теперь я выясняю, что простое «прикрепление» шаблона .dotm к активному документу (в том же окне «Шаблоны и надстройки», как показано на рисунке ниже) делает функции Private Sub Document_Open() и Private Sub Document_Close() длябеги нормально.Это решает мою проблему.

Несмотря на это, я думаю, что есть некоторая "проблема" с процедурой AutoExit() при попытке изменить CommandBars itens.Но пока это нормально.

введите описание изображения здесь

0 голосов
/ 25 июня 2018

При работе с объектной моделью CommandBars в Word необходимо всегда указывать Application.CustomizationContext.

Word может сохранять раскладки клавиатуры и настройки CommandBar в разных местах: шаблон Normal.dotm, текущий шаблон или текущий документ. Значение по умолчанию при создании дополнения CommandBar может не совпадать с 3 по умолчанию при попытке что-то удалить.

Поскольку это надстройка, я предполагаю, что вы хотите изменить всю среду Word (любой открытый документ). В этом случае используйте контекст NormalTemplate. Используйте это перед любыми вызовами CommandBar:

Application.CustomizationContext = NormalTemplate

Примечание: для сохранения настроек в текущем документе: = ActiveDocument; для сохранения в шаблоне, прикрепленном к текущему документу: = ActiveDocument.AttachedTemplate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...