Calling Macro from inside Macro - Error Compile Error: Expected variable or procedure, not module - Private Sub App

Calling Macro from inside Macro - Error Compile Error: Expected variable or procedure, not module - Private Sub App

我大部分时间都在复制代码来处理和学习 Word 中的宏。我已经让它工作了,我可以在打印之前让 MsgBox 出现,但我希望它调用另一个 module/macro 来划分模块。

对于测试,这有效:

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 并显示 "Greetings",我收到以下错误:

Compile Error: Expected variable or procedure, not module

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

虽然这个 post 之前已经介绍过,但我也会在这里分享答案,以防其他人登陆这里。

问题是您不能拥有与子模块同名的模块。请参阅下面的屏幕截图了解错误!

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

我通常只将 _Sub 附加到我的模块名称以避免出现如下问题:

还有关于使用关键字 Call 的注意事项。

You are not required to use the Call keyword when calling a procedure. However, if you use the Call keyword to call a procedure that requires arguments, argumentlist must be enclosed in parentheses. If you omit the Call keyword, you also must omit the parentheses around argumentlist. If you use either Call syntax to call any intrinsic or user-defined function, the function's return value is discarded.

查看此处了解更多信息 --> What does the Call keyword do in VB6?