Я пытаюсь создать надстройку для 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 работает нормально.
Любая помощь?