我想知道是否有办法从另一个指定的工作簿模块调用VBA函数或方法,因为可以在不使用Application.Run的情况下对特定工作表进行调用
对于我可以打电话的工作表,例如:
ActiveSheet.MyTest()
如果MyTest在工作表模块中定义
但我想调用一个在模块中定义的函数
我试过了:
ActiveWorkbook.MyTestModule()
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)
无法生成错误对象不支持此方法
我可以打电话
Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)
但我不确定Application.Run的错误处理,我会发现直接运行方法更清洁
答案 0 :(得分:21)
在您要调用的工作簿中(我将其称为A),您可以添加对要调用的工作簿的引用(我将称之为B),如下所示:
在文件A中,您应该能够在文件B中调用公共模块级函数,就像它们在文件A中一样。要解决任何命名冲突,您可以通过文件B的“项目名称”为调用添加前缀为在“项目属性”对话框的“常规”选项卡中指定(可通过“Microsoft Visual Basic for Applications工具”菜单中的“属性”命令访问)。例如,如果文件B的“项目名称”是“VBAProjectB”,则可以使用语法VBAProjectB.F从文件A调用函数F.
答案 1 :(得分:0)
顺便说一句,如果您想要访问另一个工作簿中的自定义数据类型,这也有效:
' In workbook ABC, project name Library
Public Type Book_Data
Title As String
Pub_Date As Date
Pub_City As String
End Type
' In workbook DEF (after a ref to Library)
Dim Book_Info As Library.Book_Data
Book_Info.Title = "War and Peace"
Debug.Print Book_Info.Title