Vba 从宏内部调用宏-错误编译错误:应为变量或过程,而不是模块-专用子应用

Vba 从宏内部调用宏-错误编译错误:应为变量或过程,而不是模块-专用子应用,vba,ms-office,ms-word,word-2013,Vba,Ms Office,Ms Word,Word 2013,我一直在复制代码moslty的工作和学习宏的字。我已经让它在打印前显示MsgBox,但我希望它调用另一个模块/宏来划分模块 对于测试,这是有效的: Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean) MsgBox "Before Print" End Sub 但如果我这样做: Private Sub App_DocumentBeforePrint(ByVal Doc As Document,

我一直在复制代码moslty的工作和学习宏的字。我已经让它在打印前显示MsgBox,但我希望它调用另一个模块/宏来划分模块

对于测试,这是有效的:

Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
MsgBox "Before Print"
End Sub
但如果我这样做:

Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
Call Greeting
End Sub
这是一个工作宏,我有一个简单的打开一个MsgBox并说“问候”,我得到以下错误:

Compile Error: Expected variable or procedure, not module

我如何调用这个私有子应用程序中的另一个宏*?

虽然这篇文章之前已经讨论过,但我将在这里分享答案,以防其他人在这里登陆

问题是,您不能将模块命名为与子模块相同的模块。请参见下面的屏幕截图,了解问题所在

有趣的是,如果您将调用另一个子模块(问候语)的子模块放在同一个模块(问候语)中,它就会工作!但我认为这是一种不好的做法,应该避免。见下例:

我通常只会在模块名称后附加
\u Sub
,以避免出现如下问题:

还有一个关于使用关键字
Call
的说明

调用过程时不需要使用Call关键字。 但是,如果使用Call关键字调用需要 参数、argumentlist必须用括号括起来。如果你忽略了 对于Call关键字,还必须省略括号 论点列表。如果使用调用语法调用任何内在函数或 如果是用户定义的函数,则该函数的返回值将被丢弃


请参阅此处了解更多信息-->

说实话。我修改了一篇被删除的帖子,希望能让自己摆脱提问禁令,并发布了我问题的解决方案。希望屏幕截图能帮助其他人理解这个问题。似乎使用Call这个词会让你的Q被误解。如果你编辑Q来明确你的意思(包括你的模块和函数名称相同),我会考虑重新开放。