我需要调用大量函数,每个函数都有相同的参数,我希望能够集中它们以避免笨重的代码块。显然我可以使用包装器函数来调用所有其他函数,但我并不总是调用所有这些函数。我的下一个想法是,我可以将函数放在列表或字典中并从那里调用它们,就像在Python中一样:
def foo():
return "foo"
myDict = { "foo": foo }
myDict["foo"]()
返回foo
VBA中有类似的东西吗?如果是这样,最简单的方法是什么?
答案 0 :(得分:1)
如果函数在对象/类中,则可以直接通过名称调用它们。 以下代码在SHEET1中有效,因为它是一个对象。 它不能在MODULE中工作,因为它超出了CALLBYNAME函数的功能。
因此,您可以将名称存储在字典的键中,然后只使用键(不需要函数指针)
Public Sub Something(arg1 As String)
MsgBox arg1
End Sub
Public Sub test()
CallByName Sheet1, "Something", VbMethod, "data 1"
End Sub
答案 1 :(得分:0)
似乎没有一种非常直接的方法可以做到这一点,但是,可以使用列表和CallByName
函数的组合来完成。
您可以创建一个包含所有函数名称的列表:
myFunctions = ( "foo" "bar" "baz" )
然后,您可以遍历数组以调用函数:
For Each functionName in myFunctions
CallByName Sheet1, functionName, VbMethod, listOfArguments
Next functionName
可以使用If
语句过滤掉函数