Excel VBA字典可以用来调用一个函数吗?

我有大量的function,我需要调用哪个具有相同的参数,我希望能够集中它们,以避免笨拙的代码块。 显然我可以使用包装函数来调用所有其他函数,但是我并不总是全部调用它们。 我的下一个想法是,我可以将函数放在列表或字典中,并从那里调用它们,就像在Python中一样:

def foo(): return "foo" myDict = { "foo": foo } myDict["foo"]() 

返回foo

在VBA中有类似的可能吗? 如果是这样,做到这一点最简单的方法是什么?

如果函数在对象/类中,那么你可以直接调用它们的名字。 下面的代码在SHEET1中工作,因为它是一个对象。 它不能在MODULE中工作,因为这不在CALLBYNAME函数的function之内。

所以你可以将名字存储在字典的键中,然后使用键(不需要函数指针)

 Public Sub Something(arg1 As String) MsgBox arg1 End Sub Public Sub test() CallByName Sheet1, "Something", VbMethod, "data 1" End Sub 

这似乎并不是一个非常简单的方法,但是,它可以通过组合列表和CallByName函数来完成。

你可以创build一个包含所有函数名string的列表:

 myFunctions = ( "foo" "bar" "baz" ) 

然后你可以迭代数组来调用函数:

 For Each functionName in myFunctions CallByName Sheet1, functionName, VbMethod, listOfArguments Next functionName 

函数可以用If语句过滤掉