VBA Excel 2010:帮助在工作表范围内使用Application.Run

时间:2014-09-15 22:20:05

标签: excel vba excel-vba

所以我试图在Excel2010的工作表宏中使用 Application.Run 调用任意函数。在位于" Sheet1"中的以下代码中,为什么z2返回正确的答案而z3返回Empty变量?

Option Explicit

Function myfun11(x) As Double
    myfun11 = x + 10
    Debug.Print "I WORK!"
End Function

Sub test1230()
    Dim x, output1, output2
    Dim str1

    x = 1
    str1 = "Sheet1.myfun11"

    output1 = Sheet1.myfun11(x)
    output2 = Application.Run(str1, x)
End Sub

在代码片段中,Debug.print被调用两次,这意味着Application.Run成功运行了该函数。但是,它无法检索 output2 (但成功获取output1)。我在"模块"中再次测试了代码。这样的范围(代码在模块内部" Module1")和Application.Run成功检索output1和output2:

Option Explicit

Function myfun11(x) As Double
    myfun11 = x + 10
    Debug.Print "I WORK!"
End Function

Sub test1230()
    Dim x, output1, output2
    Dim str1

    x = 1
    str1 = "Module1.myfun11"

    output1 = Module1.myfun11(x)
    output2 = Application.Run(str1, x)
End Sub

任何人都可以解释为什么会这样吗?这是一个VB错误还是有这个问题的原因?也有人解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

好的,我终于找到了解决方法。我不知道为什么会这样(或者更重要的是,为什么Application.Run不起作用),但确实如此。看起来Application.Run似乎有时候效果不是很好。

相反,我可以使用:

output3 = CallByName(Sheet1, "myfun11", VbMethod, x)