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

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

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

ActiveSheet.MyTest() 

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

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

我试过了 :

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

哪些不起作用会产生错误对象不支持这种方法

我可以打电话

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

但我不确定Application.Run的error handling,我会find更清洁的方法直接运行

在你想要调用的工作簿中(我将调用这个A),你可以添加一个对你想调用的工作簿的引用(我将调用这个B),如下所示:

  1. 在工作簿A,打开Microsoft Visual Basic for Applications窗口(例如通过按Alt + F 11 )。
  2. select工具,参考。
  3. 在出现的参考对话框中,select浏览。
  4. 在出现的“添加引用”对话框中,从“文件types”框中select“Microsoft Excel文件”,select要调用的文件(B),然后select“打开”。
  5. select确定closures参考对话框。

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

假设你有2个工作簿“Sheet1”和“Sheet2”。

“Sheet2”中一个名为DisplayMessage的 PUBLIC方法。

在“Sheet1”中,你可以这样做:

 Public Sub SetParametersInSheet2(sParam As String) With Sheets("Sheet2") .Range("B3").Value = sParam 'range in Sheet2 ' --- calling function from another worksheet .DisplayMessage "from here!" End With 

结束小组

“Sheet2”中的方法:

 Public Sub DisplayMessage(sMess As String) Dim dCurrent As Date Dim sFormattedMess As String sFormattedMess = FormatDateTime(Now, vbLongTime) & ": " & sMess Range("I2").Value = sFormattedMess 

结束小组