如何将Collection作为函数参数?我的VBA代码为何返回值错误?
解决VBA中传递Collection返回值作为参数的错误问题
这个问题的核心在于VBA对对象返回函数作为参数传递时的语法规则处理。当你直接写first(ext("Apple"))时,外层的括号会让VBA尝试把ext("Apple")返回的Collection对象当作"值"来传递,但Collection是对象类型,没有默认属性可以提取值,所以就会抛出值错误。
这里有几种可行的解决方法:
方法1:去掉调用时的外层括号
直接以无括号的方式传递参数,这是VBA中调用函数且不使用Call关键字时的标准写法:
Debug.Print first ext("Apple")
方法2:使用Call语句调用函数
如果习惯带括号传递参数,可以用Call关键字,此时参数的括号是合法的,VBA会正确传递对象引用:
Call first(ext("Apple"))
方法3:先将返回值赋值给变量再传递
这种方式更直观,也便于调试,先把ext函数返回的Collection存到变量里,再传给first函数:
Dim tempCol As Collection Set tempCol = ext("Apple") Debug.Print first(tempCol)
另外补充一下,你的两个函数本身的写法是没问题的:
ext函数正确创建并返回了Collection对象first函数通过索引C(1)获取第一个元素的写法也符合VBA Collection的规则(Collection默认从1开始索引)
内容的提问来源于stack exchange,提问作者Lewis Bavin
相关产品推荐
相关产品推荐

