从不同的工作簿调用 Excel 宏

Env*_*ite 2 excel vba

我有一个工作簿 HasMacros.xlsm 和一个工作簿 HasData.xlsm

在 HasMacros.xlsm 中,我仅使用以下代码添加了一个名为 Mod1 的模块:

Sub testmacro()

   MsgBox ("Test")

End Sub
Run Code Online (Sandbox Code Playgroud)

在 HasData.xlsm 中,我仅使用以下代码添加了一个名为 Mod2 的模块:

Sub testmacro2()

   'XXX

End Sub
Run Code Online (Sandbox Code Playgroud)

在 Excel 中没有打开任何其他内容。

我想从写入 XXX 的 testmacro2 调用 testmacro。

这失败并立即出现编译错误:

Sub testmacro2()

   testmacro()

End Sub
Run Code Online (Sandbox Code Playgroud)

这在执行时因编译错误“未定义函数子集”而失败:

Sub testmacro2()

   Call testmacro

End Sub
Run Code Online (Sandbox Code Playgroud)

这失败并立即出现编译错误:

Sub testmacro2()

   Mod1.testmacro()

End Sub
Run Code Online (Sandbox Code Playgroud)

这在执行时失败:

Sub testmacro2()

   Call Mod1.testmacro

End Sub
Run Code Online (Sandbox Code Playgroud)

我试过如何从 VBA 中的另一个特定工作簿调用函数?但我明白了

名称与现有模块、项目或对象库冲突

如何从 HasData.xlsm 中的 VBA 代码调用 HasMacros.xlsm 中的宏

The*_*ear 5

Application.Run("'工作簿HasMacros.xlsm'!testmacro")

  • 它确实如此:Application.Run("'Workbook HasMacros.xlsm'!testmacro", arg1, arg2, arg3) (2认同)

Ror*_*ory 5

您还可以在改变VBA项目的名称Workbook HasMacros.xlsm比其他的东西VBAProject,然后设置一个引用(工具-在VB编辑器引用)从HasData.xlsm项目该项目。这将允许您直接调用另一个宏而不使用Run.