VBA:将二维数组传递给集合函数[重复]
Posted
技术标签:
【中文标题】VBA:将二维数组传递给集合函数[重复]【英文标题】:VBA: Passing a 2-D Array into a Collection Function [duplicate] 【发布时间】:2021-07-15 14:49:00 【问题描述】:我正在尝试将一个二维数组传递给一个函数,以从第一列返回一组唯一值。
当我运行它时,我得到一个编译错误(“编译错误:参数不是可选的”)
这是我的代码块:
Function uniqueColl(ByVal arr As Variant) As Collection
Dim tempColl As New Collection
For x = 1 To UBound(arr, 2)
tempColl.Add arr(1, x)
Next x
uniqueColl() = tempColl
End Function
我已经用最后一行的括号试过了,没有它们,用“arr”填充括号,但这些东西似乎都不起作用。任何提示将不胜感激。
谢谢。
【问题讨论】:
仅供参考,Rubberduck 会将此作业标记为 suspicious ;-) 我多次尝试寻找这个确切的问题,但我找不到。当我发布它时,我找到了答案的链接,然后有人也发布了该内容。我给他们打勾。有什么问题? 嗯?完全没有问题,我什至对两个帖子都投了赞成票。我只是让您知道,有一个免费的开源 VBE 工具可以帮助您识别 VBA 代码中的这种(以及许多其他)类型的问题。干杯! 啊!对不起,我完全错过了链接!谢谢你(对不起,如果我觉得我很粗鲁) 答案在您的返回语句中:uniqueColl() = tempColl
- 放弃括号,编译器将其解析为对函数的递归调用,您的意图是放置一个函数返回缓冲区中的值(或指向它的指针)。正确的说法是Set uniqueColl = tempColl
,我可以看到@BZngr 在下面有完整的答案。
【参考方案1】:
使用Set uniqueColl = tempColl
或者,
Function uniqueColl(ByVal arr As Variant) As Collection
Set uniqueColl = new Collection
For x = 1 To UBound(arr, 2)
uniqueColl.Add arr(1, x)
Next x
End Function
【讨论】:
【参考方案2】:这是问题的答案:
How to return a result from a VBA function
最后一行需要使用一个集合。
【讨论】:
以上是关于VBA:将二维数组传递给集合函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章