【发布时间】:2014-09-24 19:43:47
【问题描述】:
是否可以或需要将对象/数据设置为“空”或“缺失”变体? 我希望能够有条件地将可选参数传递给函数。有时我想使用可选参数,有时我不想。
在 Python 中,您可以通过使用 **kwdargs 将字典或列表解压缩到函数参数中轻松传递所需的任何可选参数。是否有类似的东西(或在 VBA 中破解它的方法),以便您可以传入 Empty/Missing 可选参数?
特别是,我正在尝试将 Application.Run 与任意数量的参数一起使用。
编辑:
我基本上是在尝试这样做:
Public Function bob(Optional arg1 = 0, Optional arg2 = 0, Optional arg3 = 0, Optional arg4 = 0)
bob = arg1 + arg2 + arg3 + arg4
End Function
Public Function joe(Optional arg1)
joe = arg1 * 4
End Function
Public Sub RunArbitraryFunctions()
'Run a giant list of arbitrary functions pseudocode
Dim flist(1 To 500)
flist(1) = "bob"
flist(2) = "joe"
flist(3) = "more arbitrary functions of arbitrary names"
flist(N) = ".... and so on"
Dim arglist1(1 To 4) 'arguments for bob
Dim arglist2(1 To 1) 'arguments for joe
Dim arglist3(1 To M number of arguments for each ith function)
For i = 1 To N
'Execute Application.Run,
'making sure the right number of arguments are passed in somehow.
'It'd also be nice if there was a way to automatically unpack arglisti
Application.Run flist(i) arglisti(1), arglisti(2), arglisti(3), ....
Next i
End Sub
由于每个函数调用的参数数量都会发生变化,因此确保将正确数量的输入输入到 Application.Run 中的可接受方法是什么?
等效的 Python 代码是
funclist = ['bob', 'joe', 'etc']
arglists = [[1,2,3],[1,2],[1,2,3,4,5], etc]
for args, funcs in zip(arglists, funclist):
func1 = eval(funcs)
output = func1(*args)
【问题讨论】:
-
VBA 中有一个名为 IsMissing() 的函数,用于评估可选参数 msdn.microsoft.com/en-us/library/office/…
-
我不完全确定这就是你要找的东西,但你检查过ParamArray吗?为
Variant类型,可以判断是否为空,取任意个元素。 -
除了 ParamArray 还可以使用 Optional 关键字,此外,还可以选择设置一个默认值;根据变量的类型,您可以通过 IsMissing 进行测试;没什么; IsEmpty(如果您选择将 Variant 设置为空)等。
-
@Ron 谢谢你的评论正是我所需要的。我不知道你可以这样做:b = Empty
标签: excel vba excel-2010