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

时间:2015-08-04 17:30:56

标签: excel vba excel-vba dictionary

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

def foo():
    return "foo"

myDict = { "foo": foo }

myDict["foo"]()

返回foo

VBA中有类似的东西吗?如果是这样,最简单的方法是什么?

2 个答案:

答案 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语句过滤掉函数