22

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

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

ActiveSheet.MyTest() 

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

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

我试过了 :

ActiveWorkbook.MyTestModule()
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)

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

我可以打电话

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)

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

4

2 回答 2

30

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

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

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

于 2012-04-04T15:56:07.253 回答
1

顺便说一句,如果您想访问另一个工作簿中的自定义数据类型,这也适用:

' 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
于 2018-03-27T00:36:23.477 回答