将未定义数量的参数传递给VBA函数

时间:2016-04-01 09:45:23

标签: vba function excel-vba excel

我需要从VBA和函数中调用excel函数。

我不知道我有多少变量参数(var1 to ...)。

有没有办法转换数组,并将其作为参数应用......? :

Application.Run("MyFunct", fixParam1, fixParam2, var1, var2 ... varx)

我虽然最终在python中有 kwargs ......

Application.run("myFunct", fixParam1, fixParam2, kwargs(myArray))

或许是paramarray的东西?

mySub( fixParam1, fixParam2, ParamArray var() as Variant)
    Application.run([here I'm not sure...??])

2 个答案:

答案 0 :(得分:1)

定义一个将数组作为参数的函数,如下所示:

Function testFunction(args())

然后您可以将数组传递给函数:

testFunction myArray

答案 1 :(得分:0)

如果您可以更改myFunct来处理它,则可以传递数组。 http://www.cpearson.com/excel/passingandreturningarrays.htm

Application.run("myFunct", fixParam1, fixParam2, myArray)

所以我推断myFunct接受这样的参数:fixParam1,fixParam2,[var1],[var2],......括号表示可选参数。所以你可能有许多可选参数。

选项1 因此,创建一个包含所有参数的数组,并按如下方式调用它:

Application.Run("MyFunct", fixParam1, fixParam2, myArray(0), myArray(1), _
    myArray(2), myArray(3), myArray(4), myArray(5))

希望被调用的函数可以处理空白输入。

选项2 如果myFunct无法处理额外的参数,您可能需要执行以下操作:

Select Case argCount
    Case 1
        Call Application.Run("MyFunct", fixParam1, fixParam2, myArray(0))
    Case 2
        Call Application.Run("MyFunct", fixParam1, fixParam2, myArray(0), myArray(1))
    Case 3
        Call Application.Run("MyFunct", fixParam1, fixParam2, myArray(0), myArray(1), myArray(2))
    Case 4
        Call Application.Run("MyFunct", fixParam1, fixParam2, myArray(0), myArray(1), myArray(2), myArray(3))
End Select

不漂亮但有效。