【问题标题】:VBA: Passing a 2-D Array into a Collection Function [duplicate]VBA:将二维数组传递给集合函数[重复]
【发布时间】: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 在下面有完整的答案。

标签: arrays vba collections


【解决方案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

    最后一行需要使用一个集合。

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2013-01-18
      • 2013-03-28
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多