命令栏( "Text" ).退出文档时未删除的控件 - VBA Word 加载项



我正在尝试使用VBA为MS Word创建一个附加组件。 它有一个"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 

退出文档时,不会删除以前在命令栏("文本"(集合中添加的按钮。当我打开一个新的空白Word文档并且按钮保留在右键单击菜单中时,我会看到这一点。

我知道例程已正确执行,因为有一个 MsgBox 指令来验证它。 这仅发生在加载项的 AutoExit 子例程中,即作为加载项加载:在使用 vba 模块的宏中运行代码可以正常工作。

有什么帮助吗?

在 Word 中使用 CommandBars 对象模型时,必须始终指定Application.CustomizationContext

Word 可以在不同位置保存键盘布局和命令栏自定义项:Normal.dotm 模板、当前模板或当前文档。创建命令栏添加时的默认值可能与尝试删除某些内容时的默认值不同 3。

由于这是一个加载项,因此我假设您希望对整个 Word 环境(任何打开的文档(进行更改。在这种情况下,请使用上下文NormalTemplate。在调用命令栏之前使用以下命令:

Application.CustomizationContext = NormalTemplate

注: 用于在当前文档中保存自定义项:= ActiveDocument;用于保存在附加到当前文档的模板中:= ActiveDocument.AttachedTemplate

我用解决方法解决了我的问题:

我试图将模板(.dotm("添加"为加载项(在"模板和加载项"窗口中(,以便在新文档中使用我的VBA项目。这就是我使用AutoExec()AutoExit()程序的原因。 但直到现在我才发现,只需将 .dotm 模板"附加"到活动文档(在同一个"模板和加载项"窗口中,如下图所示(才能使函数Private Sub Document_Open()Private Sub Document_Close()正常运行。这解决了我的问题。

即便如此,我认为在尝试更改命令栏时,AutoExit()过程存在一定的"问题"。但现在没关系。

在此处输入图像描述

最新更新