字宏:第二台PC上的“未定义子或功能”

时间:2019-02-12 19:08:55

标签: vba ms-word undefined

我创建了一个带有2个宏的.docm文件,并且在我的PC上一切正常,但是如果将.docm文件复制到另一台PC,则会显示“未定义子项或函数”错误。

宏1: 一个带有附加宏的activeX按钮(Developer - Legacy tools):

Private Sub buttonStart_Click()
    Main
End Sub

宏2:“主要”(通过View - Macros - Show Macros创建)

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

在另一台PC上,我授予Word使用ActiveX的权限,但是View - View Macros列表中缺少“主要”宏,并且每次我尝试通过单击启动宏时都显示错误消息。按钮。

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

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

enter image description here

1 个答案:

答案 0 :(得分:1)

基于我对情况的了解:

  1. 双击ActiveX控件,将为该控件的默认操作创建(或选择,如果已经存在)一个过程。这将始终位于嵌入ActiveX控件的文档的ThisDocument类模块中。
  2. 使用Word用户界面中的控件创建宏后,该宏将自动在Normal.dotm(默认)模板的名为NewMacros的模块中创建。
  3. 仅普通模块中的宏(定义为不带参数的“公共” Sub过程)将出现在可用宏列表中。 ActiveX控件的事件未出现在列表中的原因是:a)它不是Private,并且b)它不是在普通模块中-它在ThisDocument中,它是一个类模块(代表文档在代码级别)。

因此,buttonStart_Click位于已分发到另一台PC的ThisDocument模块中。另一方面,Sub Main在Normal.dotm模板的NewMacros中创建,该模板保留在原始计算机上。

因此,您需要

  1. 单击项目BilderEinlesen,转到Insert菜单,然后将 Module 插入项目。默认情况下,它将命名为Module1
  2. 在“普通”项目中双击NewMacros以打开代码页。完全选择Sub Main,将其复制。
  3. 双击Module1打开代码页。如果Option Explicit不在顶部,请键入。粘贴复制的Sub Main

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

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