【问题标题】:Excel vba Function with return带返回的Excel vba函数
【发布时间】:2016-03-09 12:46:05
【问题描述】:

我为我的问题找到了this solution。它像这样工作正常:

Dim CNPJs As New Collection, a
Dim i As Long
Dim rng As Range

U_L = Plan2.Range("A" & Rows.Count).End(xlUp).Row

On Error Resume Next
For Each rng In Plan2.Range("A2:A" & U_L)
    CNPJs.Add rng.value, rng.value
Next

但是现在我想构建一个返回这个唯一数组的函数,因为我会多次使用这个......我试过这个:

Public Function unArray(myRange As Range) As Collection

    Dim arr As Collection, a

    On Error Resume Next
    For Each rng In myRange
        arr.Add rng.value, rng.value
    Next

    unArray = arr

End Function

我称之为:

Sub test()

      Dim CNPJs As New Collection, a

      U_L = Plan2.Range("A" & Rows.Count).End(xlUp).Row

      CNPJs = unArray(Plan2.Range("A2:A" & U_L))

End Sub

但它返回此错误:


编译错误:
"参数是必需的"

你能帮帮我吗?

【问题讨论】:

  • 我不是 100% 确定,但我认为您需要使用 SetSet CNPJs = unArray(Plan2.Range("A2:A" & U_L))... 函数中的集合也使用New...
  • 有效!!!谢啦!我还必须在这里使用SetSet unArray = arr。请张贴作为答案,我会接受的。
  • 我现在正在打电话。但是需要解释为什么要发布合适的答案......也许稍后......不过,我不介意这些要点。你让它工作,这对我来说很重要;)
  • 好的,但我需要选择一个答案,请发布:)

标签: arrays excel vba function return


【解决方案1】:

集合是一个对象,需要像一个对象一样对待,这意味着你需要Set它。但请记住,此操作只会创建一个指向 RAM 内范围的指针。
对于您的情况,只需使用:

Set CNPJs = unArray(Plan2.Range("A2:A" & U_L))

也就是说,这对您的代码无关紧要,但是有 2 个集合,其中一个是 Set 到另一个,交替其中一个也会影响另一个。

如果您仍有疑问,请尽管提问。 :)

【讨论】:

    【解决方案2】:
    U_L = Plan2.Range("A" & Rows.Count).End(xlUp).Row
    

    这将返回一个长整数或整数。范围需要一个字符串,因此在范围内引用它时需要将 U_L 转换为字符串。

    CNPJs = unArray(Plan2.Range("A2:A" & CStr(U_L)))
    

    【讨论】:

    • 不幸的是,这不是真的。 "A" & variable 首先将是一个字符串。 (只要variable 不是会引发错误的对象(如果该对象是指向非对象变量的指针,例如RangeCells,仍然可以工作))。另一方面,Range(Cells(1 ,1)) 也可以工作,它只是一个指针(没有字符串或数字变量)。 ;)
    • 这是最近对 excel 的更改吗,因为我过去确实收到过这样的错误。我不明白如何将字符串与整数连接起来而不会出错
    猜你喜欢
    • 2022-06-20
    • 2013-01-24
    • 2019-09-29
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多