Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Excel VBA字典调用函数吗?_Vba_Excel_Dictionary - Fatal编程技术网

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

可以使用Excel VBA字典调用函数吗?,vba,excel,dictionary,Vba,Excel,Dictionary,我需要调用大量函数,每个函数都有相同的参数,我希望能够将它们集中起来,以避免出现笨拙的代码块。显然,我可以使用包装器函数调用所有其他函数,但我并不总是调用所有函数。我的下一个想法是,我可以将函数放在列表或字典中,然后从那里调用它们,就像在Python中一样: def foo(): return "foo" myDict = { "foo": foo } myDict["foo"]() 返回foo VBA中是否有类似的功能?如果是这样,最简单的方法是什么?如果函数位于对象/类内部,则

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

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