所以我试图在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错误还是有这个问题的原因?也有人解决这个问题吗?
答案 0 :(得分:1)
好的,我终于找到了解决方法。我不知道为什么会这样(或者更重要的是,为什么Application.Run不起作用),但确实如此。看起来Application.Run似乎有时候效果不是很好。
相反,我可以使用:
output3 = CallByName(Sheet1, "myfun11", VbMethod, x)