Vba 快速访问工具栏按钮能否从特定项目调用宏?

Vba 快速访问工具栏按钮能否从特定项目调用宏?,vba,word-2016,Vba,Word 2016,以下声明包括来自的信息 在VBA中调用过程时,必须确保项目中的另一个模块没有同名的过程。如果是这种情况,则必须指定模块以确保调用正确的过程,如下所示 Sub Main() Module1.MyProcedure End Sub 现在,如果您处理的多个项目的过程具有相同的名称,那么您不仅要指定模块,还要指定项目——即使模块具有唯一的名称 Sub Main() [MyProject.dotm].[MyModule].Main End Sub 我有以下具体情况。在我的normal.

以下声明包括来自的信息

在VBA中调用过程时,必须确保项目中的另一个模块没有同名的过程。如果是这种情况,则必须指定模块以确保调用正确的过程,如下所示

Sub Main() 
Module1.MyProcedure 
End Sub
现在,如果您处理的多个项目的过程具有相同的名称,那么您不仅要指定模块,还要指定项目——即使模块具有唯一的名称

Sub Main() 
    [MyProject.dotm].[MyModule].Main 
End Sub
我有以下具体情况。在我的normal.dotm中,我在module
mod_x
中有一个过程
main
。我在快速访问工具栏中创建了一个按钮,直接调用此过程。它很好用

在myTemplate.dotm中,模块
mod_y
中还有一个名为
main
的过程。因此,当我基于此模板创建文档时,我可以从该模板以及normal.dotm访问宏

不幸的是,现在按下工具栏中的按钮时,它总是调用
mod_y
中的主函数,而不是使用normal.dotm中正确的主函数


是否可以将此快速访问工具栏按钮更改为始终从normal.dotm调用正确的函数而不调用其他函数

您可以确保调用项目引用了所有适用的项目。这将使引用每个项目的对象变得更简单,并增加了对每个项目进行优先级排序的能力

normal.dotm
模板应该已经显示在项目浏览器树中:

      

  • 单击工具→ 参考,我们应该发现
    Normal
    已经列出,并且“永久”选中(启用)

  • 单击浏览。。。并将“文件类型”下拉列表更改为Word文档,以明确引用外部文档中的一个或多个项目

我们可以设置优先级,也可以使用上/下箭头设置我们添加的每个项目的优先级。这指定VBA在查找命名过程时检查引用的顺序注意我们不能将
.DOCX
项目移动到
正常
模板之上

但是我们马上会有一个解决方案,这是必要的,这样我们就可以[从我们的工具栏]引用有问题的外部过程,而无需显式调用它


显式外部调用 我有4个名为
mySub()
的子例程:两个在单独的
docx
文件
Module1
中,一个在
Normal
Module1
中,另一个在
Normal
本工作簿中

它们中的每一个都可以显式调用:

Project_in_Document1.Module1.mySub
Project_in_Document2.Module1.mySub
Normal.ThisDocument.mySub
Normal.Module1.mySub

解决方法:调用外部sub,就像调用内部sub一样 对于工具栏,我们需要它调用sub,类似于:

Project_in_Document2.Module1.mySub
…但是我们只能用一个本地过程名来引用它(它想要“最接近”一个——在
normal.dot
中)


我非常感谢你花时间写这么多的答复,但我仍然很难确定这是否是一个实际的答复。在回答的第一部分,您描述了当我试图实现相反的目标时,如何覆盖normal.dotm。您继续描述normal.dotm中的sub有偏好,而我的确切问题是它们没有。最后,您展示了我如何使用VBA调用其他项目的Sub,尽管这已经是我问题的前提。我不排除我或您的误解。所以我要重述一下:normal.dotm和myTemplate.dotm都有一个名为“mySub”的子对象。为了便于讨论,我们假设我也不能重命名。我希望快速启动按钮始终从normal.dotm调用“mySub”,即使我刚刚从myTemplate.dotm创建了一个新文档。可能吗?