通过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一样
展开
 我来答
泉汇泽
推荐于2017-09-21 · TA获得超过422个赞
知道小有建树答主
回答量:763
采纳率:0%
帮助的人:312万
展开全部

只能传 单元格,然后转数组。如下 

Function MyTest(rng As Range)
    Dim arr() As Variant
   Set arr = rng.Value
    MyTest = UBound(arr)
End Function
更多追问追答
追问
你这个方法应该可以,但我问的是为什么不能直接传数组?另外,看我的图,假如我在函数对话框中不用区域引用,而是直接输入几个数字作为数组,那么,你给的range这个方法恐怕是不行吧?
追答
自定义函数传入什么内容,主要取决于你函数定义是的参数
你画面上的意思是选择了一片单元格区域,因此要想函数可以被调用,参数只能定义成MyTest(rng As Range)
假如你需要传入数组,你那种写法是正确的,只不过是你画面参数输入的部正确。
调用时应该=MyTest(此处应该是一个数组,而不是单元格区域)
Ynzsvt
2013-06-13 · TA获得超过6659个赞
知道大有可为答主
回答量:1.5万
采纳率:40%
帮助的人:2574万
展开全部
这要用ParamArray的。
追问
试过,可以,但是参数一多,要逐个输入,所以不可行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式