可以使用Excel VBA字典调用函数吗?
我需要调用大量函数,每个函数都有相同的参数,我希望能够将它们集中起来,以避免出现笨拙的代码块。显然,我可以使用包装器函数调用所有其他函数,但我并不总是调用所有函数。我的下一个想法是,我可以将函数放在列表或字典中,然后从那里调用它们,就像在Python中一样:可以使用Excel VBA字典调用函数吗?,vba,excel,dictionary,Vba,Excel,Dictionary,我需要调用大量函数,每个函数都有相同的参数,我希望能够将它们集中起来,以避免出现笨拙的代码块。显然,我可以使用包装器函数调用所有其他函数,但我并不总是调用所有函数。我的下一个想法是,我可以将函数放在列表或字典中,然后从那里调用它们,就像在Python中一样: def foo(): return "foo" myDict = { "foo": foo } myDict["foo"]() 返回foo VBA中是否有类似的功能?如果是这样,最简单的方法是什么?如果函数位于对象/类内部,则
def foo():
return "foo"
myDict = { "foo": foo }
myDict["foo"]()
返回foo
VBA中是否有类似的功能?如果是这样,最简单的方法是什么?如果函数位于对象/类内部,则可以直接按名称调用它们。 下面的代码在SHEET1中工作,因为它是一个对象。 它不会在模块中工作,因为这超出了CALLBYNAME函数的功能范围 因此,您可以将名称存储在字典的键中,然后只使用该键(不需要函数指针)
似乎没有一种真正直接的方法可以做到这一点,但是,可以使用列表和
CallByName
函数的组合来实现
您可以创建一个列表,其中包含作为字符串的所有函数名:
myFunctions = ( "foo" "bar" "baz" )
然后,可以迭代数组以调用函数:
For Each functionName in myFunctions
CallByName Sheet1, functionName, VbMethod, listOfArguments
Next functionName
函数可以用
If
语句过滤掉很可能你能做的最好的事情就是使用Application.Run(myDict(“foo”)
,但这并不是一种能很好地转换为VBA的模式,它实际上没有函数指针的概念。有一个CallByName
函数,可以通过它的字符串表示调用任何函数。例如,您可以执行:CallByName(“foo”)
,这将依次调用名为“foo”的函数。这就是你要找的吗?
For Each functionName in myFunctions
CallByName Sheet1, functionName, VbMethod, listOfArguments
Next functionName