Excel vba函数返回

时间:2016-03-09 12:46:06

标签: arrays excel vba function return

我找到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

但它会返回此错误:

enter image description here
编译错误:
参数是必需的”

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

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

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

也就是说,它对你的代码无关紧要,但是有两个集合,而另一个是Set,另外一个也会影响另一个。

如果您还有疑问,请询问。 :)

答案 1 :(得分:0)

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

这将返回long或整数。范围需要字符串,因此您需要在范围内引用U_L时将其转换为字符串。

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