从 VBA 中的不同模块调用子例程

Posted

技术标签:

【中文标题】从 VBA 中的不同模块调用子例程【英文标题】:Call a Subroutine from a different Module in VBA 【发布时间】:2011-02-17 18:14:36 【问题描述】:

是否可以从一个Module 调用一个函数到另一个?

我有以下代码:

Sub MAIN()
    Call IDLE
End Sub
MAIN 位于Module1 IDLE 位于Module2 并定义为:Sub IDLE()

【问题讨论】:

【参考方案1】:

使用 Module2 为调用添加前缀(例如 Module2.IDLE)。既然你问了这个问题,我假设你在项目中多次定义了 IDLE,否则这不应该是必要的。

【讨论】:

不客气。请不要忘记接受答案(单击检查):)。 如果需要在模块名前加上前缀,那就有问题了。应该没有必要。 @Remou - 你错了。首先,OP已经说它解决了他的问题,不知道为什么这对你来说还不够。其次,您可以自己尝试,创建 Module1 和 Module2 并在每个模块中创建一个名为 Sub1 的子程序。然后在从 Sheet1 中的子例程调用 Sub1 名称时尝试从 Sub1 名称中去掉 Module1 或 Module2,并让我知道当您尝试从 VBA 菜单栏调试->编译时会发生什么。 如果你创建了两个同名的程序,项目将无法编译,应该纠正错误。 OP 提到了两个过程,一个称为 Main,一个称为 Idle。如果这是两个标准模块,应该可以从 Main 调用 Idle,甚至从即时窗口调用,而不用任何前缀。如果不是,则信息缺失且问题不完整。重要的是,答案应该对希望找到答案的其他人有效。 @Remou - 对,如果你在调用前加上 module1 或 module2,这个错误就会消失,这就是我要说的重点。但是您说“如果您创建两个同名的程序,则项目将无法编译”,这是不正确的。您可以拥有 2 个具有相同名称的子程序,只是在调用子程序时您必须使用正确的模块作为前缀。有意义吗?

以上是关于从 VBA 中的不同模块调用子例程的主要内容,如果未能解决你的问题,请参考以下文章

fortran 模块的子例程名称冲突

如何从 unix shell 调用带有参数的子例程

从.Net调用访问模块中的例程?

C++ 从 dll 调用 FORTRAN 子例程

如何从 Windows Batch 子例程调用 SCons?

从 C++ 调用带有可选参数的 Fortran 子例程