【问题标题】:Calling function from sheet module of another workbook从另一个工作簿的工作表模块调用函数
【发布时间】: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)模块中。 :) 注意:它实际上与调用代码在不同的工作簿中的问题无关。在同一个工作簿中它不会那样工作。
  • 谢谢,罗里!我曾经将大量代码放入工作表模块中,因此我不得不询问并确认这是不可能的。如果您粘贴您的评论作为答案,我会接受。而且,正如你所说,我会将代码放在标准模块中,完全没有问题。

标签: excel vba


【解决方案1】:

易于修复 - 如果您需要使用 Run 调用它,请不要将代码放在工作表(或 ThisWorkbook)模块中。 :)

注意:这实际上与调用代码在不同的工作簿中的问题无关。在同一个工作簿中它不会那样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2021-06-16
    相关资源
    最近更新 更多