字宏:"Sub or function not defined" 在第二台电脑上

Word Macro: "Sub or function not defined" on 2nd PC

我创建了一个包含 2 个宏的 .docm 文件,在我的电脑上一切正常,但如果我将 .docm 文件复制到另一台电脑,它会显示 "sub or function not defined" 错误。

宏1: 附有宏的 activeX 按钮 (Developer - Legacy tools):

Private Sub buttonStart_Click()
    Main
End Sub

宏 2:"Main"(通过 View - Macros - Show Macros 创建)

Sub Main()
    'Calls other subs and functions in the right order
End Sub

在另一台 PC 上,我授予 Word 使用 activeX 的权限,但 "Main" 宏在 View - View Macros 列表中丢失,并且每次我尝试启动宏时它都显示错误消息) 通过单击按钮。

抱歉,我是 VBA 和宏的新手。我是否必须 link 第二个宏或以不同的方式添加它才能在其他 PC 上访问?

编辑:VBA 编辑器的左侧(两个宏看起来相同):

根据我对情况的了解:

  1. 当双击 ActiveX 控件时,将为控件的默认操作创建(或选择,如果它已经存在)一个过程。这将始终位于嵌入 ActiveX 控件的文档的 ThisDocument class 模块中。
  2. 当使用 Word 用户界面中的控件创建宏时,将在名为 NewMacros.[=50 的模块中的 Normal.dotm(默认)模板中自动创建该宏=]
  3. 只有普通模块中定义为 "public" Sub 不带参数的过程的宏才会出现在可用的宏列表中。 ActiveX 控件的事件没有出现在列表中的原因是 a) 它是 Private 而不是 public 并且 b) 它不在普通模块中 - 它在 ThisDocument 中,这是一个class模块(代表代码级别的文档)。

因此,buttonStart_Click 在已分发到另一台 PC 的文档中,在 ThisDocument 模块中。另一方面,Sub Main 是在 Normal.dotm 模板中的 NewMacros 中创建的,它保留在原始机器上。

因此,您需要

  1. 单击项目 BilderEinlesen,转到 Insert 菜单并向项目插入一个 模块 。默认情况下,它将被命名为 Module1.
  2. 在 Normal 项目中双击 NewMacros 打开代码页。 Select Sub Main 全部复制过来
  3. 双击 Module1 打开代码页。如果 Option Explicit 不在顶部,请输入。粘贴复制的 Sub Main.

现在这两个程序应该在将要分发的文档中。

注意:就个人而言,我会将 Sub Main 重命名为其他名称。 Sub Main 由 VBA 在某些自动情况下生成(例如用于创建此环境的情况),如果 VBA 可能 导致冲突再次想要创建这样一个宏...或者如果同时打开的项目中存在另一个具有该名称的宏。如果您确实重命名,请记住还要更改按钮单击事件中的过程调用。