如何从VBA中的另一个特定工作簿调用函数?

Gut*_*tti 17 excel vba

我想知道是否有办法从另一个指定的工作簿模块调用VBA函数或方法,因为可以在不使用Application.Run的情况下对特定工作表进行调用.

对于我可以调用的工作表,例如:

ActiveSheet.MyTest() 
Run Code Online (Sandbox Code Playgroud)

如果在工作表模块中定义了MyTest

但我想调用模块中定义的函数

我试过了 :

ActiveWorkbook.MyTestModule()
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)
Run Code Online (Sandbox Code Playgroud)

哪些不起作用生成错误对象不支持此方法

我可以打电话

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)
Run Code Online (Sandbox Code Playgroud)

但我不确定Application.Run的错误处理,我会发现直接运行该方法更干净

Bri*_*ire 22

在您要调用的工作簿中(我将其称为A),您可以添加对要调用的工作簿的引用(我将称之为B),如下所示:

  1. 在工作簿A中,打开Microsoft Visual Basic for Applications窗口(例如,通过按Alt+ F11).
  2. 选择工具,参考.
  3. 在出现的"引用"对话框中,选择"浏览".
  4. 在出现的"添加引用"对话框中,从"文件类型"框中选择"Microsoft Excel文件",选择要调用的文件(B),然后选择"打开".
  5. 选择"确定"关闭"引用"对话框.

在文件A中,您应该能够在文件B中调用公共模块级函数,就像它们在文件A中一样.要解决任何命名冲突,您可以通过"项目名称"为文件B添加前缀,如"项目属性"对话框的"常规"选项卡(可通过"Microsoft Visual Basic for Applications工具"菜单中的"属性"命令访问).例如,如果文件B的"项目名称"是"VBAProjectB",则可以使用语法VBAProjectB.F从文件A调用函数F.

  • 注意:为此,请勿使用“VBAProject”作为名称,否则会发生冲突。 (4认同)