通过EXCEL VBA自定义了一个函数,无法把数组传入到函数中。
FunctionMyTest(Arr()asVariant)MyTest=ArrEndFunction以上这个函数,通过vba其他过程调用它,可以正常返回结果。但是,当我...
Function MyTest( Arr() as Variant)MyTest=Arr
End Function
以上这个函数,通过vba其他过程调用它,可以正常返回结果。但是,当我把这个函数当作公共函数,在excel中插入时,就会出错。
经过我测试,发现要把Arr后面的括号去掉,就好了。为什么呢?
我想把数组传入到自定义函数中,既可以如上图所示框选一个数组区域来传递数组,也可以在对话框中输入数字作为参数传到函数里。测试情况:Function MyTest(Arr as range)——可以框选区域做参数,但是不支持手工填参数Function MyTest(Arr())——不可以框选区域做参数,只能手工填参数必须带大括号例如{1,2,3}Function MyTest(Arr)——可以框选区域做参数,可以手工填参数必须带大括号例如{1,2,3}要求:可以框选区域做参数,且支持手工输入参数,且无需使用大括号。像系统函数sum一样 展开
End Function
以上这个函数,通过vba其他过程调用它,可以正常返回结果。但是,当我把这个函数当作公共函数,在excel中插入时,就会出错。
经过我测试,发现要把Arr后面的括号去掉,就好了。为什么呢?
我想把数组传入到自定义函数中,既可以如上图所示框选一个数组区域来传递数组,也可以在对话框中输入数字作为参数传到函数里。测试情况:Function MyTest(Arr as range)——可以框选区域做参数,但是不支持手工填参数Function MyTest(Arr())——不可以框选区域做参数,只能手工填参数必须带大括号例如{1,2,3}Function MyTest(Arr)——可以框选区域做参数,可以手工填参数必须带大括号例如{1,2,3}要求:可以框选区域做参数,且支持手工输入参数,且无需使用大括号。像系统函数sum一样 展开
2个回答
展开全部
只能传 单元格,然后转数组。如下
Function MyTest(rng As Range)
Dim arr() As Variant
Set arr = rng.Value
MyTest = UBound(arr)
End Function
更多追问追答
追问
你这个方法应该可以,但我问的是为什么不能直接传数组?另外,看我的图,假如我在函数对话框中不用区域引用,而是直接输入几个数字作为数组,那么,你给的range这个方法恐怕是不行吧?
追答
自定义函数传入什么内容,主要取决于你函数定义是的参数
你画面上的意思是选择了一片单元格区域,因此要想函数可以被调用,参数只能定义成MyTest(rng As Range)
假如你需要传入数组,你那种写法是正确的,只不过是你画面参数输入的部正确。
调用时应该=MyTest(此处应该是一个数组,而不是单元格区域)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询