我有多个文件,其中包含相同的VBA代码,很可能需要随时更改。我不想一个接一个地去c / p代码,所以我想到的一个明显的想法就是让一个集中的文档包含所有文件所引用的代码(模板?)。
我在stackoverflow上找到了一些主题,但它们都不适用于我,或者没有结果:
Run external vba-code in MS Word
Centralized VBA code (one file) for multiple workbooks
Calling an External VBA from VBScript
有什么想法吗?
答案 0 :(得分:2)
是的,您将代码集中在模板中并将该模板附加到各种Word文档的想法将起作用。这些照片使用的是Word 2007,但我认为它与新版本相似。首先创建一个新文档并将代码放在一个模块中(在图片中命名为" CommonFunctions"):
将文档另存为启用宏的模板:
现在创建一个新文档,将其保存为* .docm(运行代码所必需的,因为* .docx是无宏的),并附加文档模板,如下所示。 (另一种方法是将* .dotm文件放在启动目录C:\Users\<username>\AppData\Roaming\Microsoft\Word\STARTUP
中,然后自动加载它。)如果你没有把它放在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"
注意代码如何为您加载AddIn,因为除非您将它放在Startup目录中,否则它不会被自动加载。此图显示了如何引用AddIn但未加载。您需要复选框才能调用其中的代码。如果您没有使用代码加载它并且没有将其放入启动中,则每次文档打开时用户都必须手动设置复选标记。
现在单击按钮时表单应该可以正常工作。请注意它如何调用公共和私有函数。 Private关键字肯定会将一个模块与另一个模块隔离开来,但似乎从AddIn调用的模块被认为是同一模块的一部分,不知道为什么?此外,如果您根本不打开公共或私人,那么VBA认为它是公开的,我很确定。