【发布时间】:2022-07-12 17:10:56
【问题描述】:
当我尝试调用另一个工作簿的工作表模块内的子和函数时,只有子调用有效。该函数,即使在公共范围内,也会返回一个 void(零长度)字符串。有办法解决吗?
Book1.xlsm的Sheet1的sheet模块里面的代码:
Sub sMyMsg()
MsgBox "hey sub"
End Sub
Public Function fMyMsg() As String
fMyMsg = "hey func"
End Function
以下代码位于与 Book1.slsm 位于同一文件夹中的另一个工作簿 (Book2.xlsm) 的标准模块中:
Sub Test_Sub() 'It works
Application.Run "Book1.xlsm!Sheet1.sMyMsg"
End Sub
Sub Test_Func() 'It doesn't work. Gives me a void (zero lenght) string
Dim s As String
s = "test"
s = Application.Run("Book1.xlsm!Sheet1.fMyMsg")
MsgBox s
End Sub
【问题讨论】:
-
易于修复 - 如果您需要使用
Run调用它,请不要将代码放在工作表(或 ThisWorkbook)模块中。 :) 注意:它实际上与调用代码在不同的工作簿中的问题无关。在同一个工作簿中它不会那样工作。 -
谢谢,罗里!我曾经将大量代码放入工作表模块中,因此我不得不询问并确认这是不可能的。如果您粘贴您的评论作为答案,我会接受。而且,正如你所说,我会将代码放在标准模块中,完全没有问题。