用于多个Word文件的集中式VBA代码

用于多个Word文件的集中式VBA代码,vba,ms-word,Vba,Ms Word,我有多个具有相同VBA代码的文件,这些文件很可能会随着时间的推移而更改。我不想一个接一个地对代码进行c/p,所以我想到的一个明显的想法是,使用所有文件都引用的代码(模板?)创建一个集中的文档 我在stackoverflow上找到了一些主题,但没有一个适合我,也没有一个是不确定的: 有什么想法吗?是的,您将代码集中在模板中并将模板附加到各种Word文档的想法会奏效。这些图片使用的是Word2007,但我认为对于较新的版本来说,它们非常相似。首先创建一个新文档并将代码放入一个模块(图中名为“C

我有多个具有相同VBA代码的文件,这些文件很可能会随着时间的推移而更改。我不想一个接一个地对代码进行c/p,所以我想到的一个明显的想法是,使用所有文件都引用的代码(模板?)创建一个集中的文档

我在stackoverflow上找到了一些主题,但没有一个适合我,也没有一个是不确定的:


有什么想法吗?

是的,您将代码集中在模板中并将模板附加到各种Word文档的想法会奏效。这些图片使用的是Word2007,但我认为对于较新的版本来说,它们非常相似。首先创建一个新文档并将代码放入一个模块(图中名为“CommonFunctions”):

将文档另存为启用宏的模板:

现在制作一个新文档,将其另存为*.docm(因为*.docx是无宏的,所以它必须运行代码),并附加文档模板,如下所示。(另一种方法是将*.dotm文件放在启动目录
C:\Users\\AppData\Roaming\Microsoft\Word\startup
,它会自动加载。)如果不将其放在启动中,您会看到名称,但不会加载(即,选中),但您可以在代码中加载,如我所示

在此文档中创建用户表单:

为按钮的单击事件输入以下代码:

If AddIns("c:\_b\MasterDocWithFunctions.dotm").Installed = False Then
    AddIns("c:\_b\MasterDocWithFunctions.dotm").Installed = True
End If

Application.Run "CommonFunctions.Test1"
Application.Run "CommonFunctions.Test2"

请注意代码如何为您加载加载项,因为除非您将其放入启动目录,否则它不会自动加载。此图片显示如何引用加载项,但未加载加载项。您需要复选框才能调用其中的代码。如果您不使用代码加载它,也不将其放在启动中,那么用户将不得不在每次打开文档时手动放置复选标记

现在,当您单击按钮时,表单应该可以工作了。注意它如何调用公共和私有函数。Private关键字肯定会将一个模块与另一个模块屏蔽,但似乎从外接程序调用的模块被视为同一模块的一部分,不知道为什么?另外,如果你根本不把它放在公共或私人的位置,那么VBA会认为它是公共的,我很确定


谢谢,但我认为这对我来说不起作用。。。我所有的按钮和单选按钮宏都停止工作了。在这种情况下,我需要做一些不同的事情吗?所以你把代码和表单放在一个*.dotm文件中,对吗?如果直接打开*.dotm文件呢?按钮能用吗?只是想看看*.dotm文件是否已损坏,或者当*.dotm文件附加到新文档并使用时,是否有什么东西正在损坏。不,在dotm中也不工作。我剪切并粘贴了从“ThisDocument”到“Module1”的所有代码,如果有必要的话。我不认为复制粘贴是正确的方式,因为它应该只保留在模块中,对吗?我还注意到我可以从宏窗口运行所有非私有宏,就像你在屏幕截图中显示的那样。只是没有一个表单元素会自动触发任何东西。那么模块和表单都是在各种word文档中逐字复制的吗?如果您使用其中一个Word文档并将其另存为*.dotm文件,会怎么样?理论上,表单应该仍然可以正常工作,因为它是单词doc的相同副本。如果没有,可能是安全设置阻止了代码。这些在Orb>Word选项>信任中心>信任中心设置>宏设置下。表单元素是按路径调用其他文件,还是调用数据库?