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:将二维数组传递给集合函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将二维数组传递给函数[重复]

将二维数组指针传递给c ++中的函数[重复]

无法使用双指针作为函数参数传递二维数组[重复]

vba 赋值给二维数组?

如何通过c中的指针传递二维数组[重复]

无法将二维字符数组传递给函数(C++)