Word VBA,Prevoius 代码妨碍了

Word VBA, Prevoius code getting in way

我已经为某人写了一个单词 vba 宏。我已将该文件另存为 .dotm 和 .docm 文件。当我在他的电脑上打开文件时,我发现里面有一堆不是我写的宏!

甚至有时当我在自己的电脑上打开我自己的一个单词宏时,会看到一堆我没有写的代码,通常在 "normal" 选项卡下:

问题是有时word文档中以前的代码会导致新代码出错。

其他类型的项目不会出现这种情况。 VBA 用于 Excel、powerpoint、访问、....

问题 1:为什么会有那个代码?

问题2:如何发送一个word宏文件给别人而不用担心之前的代码会碍事?

Question1: Why is that code there?

Normal.dotm是标准文档模板

https://support.office.com/en-ie/article/Change-the-Normal-template-Normaldotm--06de294b-d216-47f6-ab77-ccb5166f98ea?ui=en-US&rs=en-IE&ad=IE

The Normal.dotm template opens whenever you start Microsoft Office Word 2007, and it includes default styles and customizations that determine the basic look of a document.

当您打开一个空白文档时,我认为默认情况下 Word 将使用此模板,因此该 Normal.dotm 文件中的任何宏都将保留在 "new" 文档中,并且 Normal.dotm 将出现在 VBE 中。 (如果你有一个 Personal.xlsb 文件,这实际上可以类似于 Excel,尽管 Excel 中默认不存在)

Question2: How can I send a word macro file to someone without having to worry about the previous code getting in the way?

在发送到另一个文件之前,您始终可以从文件中手动删除任何 unwanted/unneeded 模块。

或者,分发宏的更好方法是在文档模板或加载项文件中。

或者,您可以将模块代码导出为文本文件,其他用户可以将其导入。

David Zemens 为您提供了可靠的答案,但要添加一些额外的信息来解释此行为: Normal 模板在 any 文档的 opening/closing/alteration 上触发(全局行为)。因此,如果您将一些宏代码添加到 Normal 模板,即使您打开一个空白的 Word 文档,您也可以预期它会发生。

为避免这种情况,请不要将您不希望 全局 发生的 Normal 代码放在其中,或者遵循一个大卫回答中的备选方案。我的猜测是你想要的宏只有 link 到 某些 文档,在这种情况下你应该将它们放在 Normal 之外,至于没有冲突的行为。如果这实际上是您正在寻找的,我个人更喜欢 AddIns 更适合全局行为,因为它们不会对 Normal 中的现有代码产生任何奇怪的行为。