Excel vba函数返回

我为我的问题find了这个解决scheme 。 它的工作正常,如下所示:

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 

但现在我想build立一个函数,返回这个独特的数组,因为我会用这个很多次…我试过这个:

 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 

但是它返回这个错误:

在这里输入图像说明
编译错误:
这个论点是必须的”

你可以帮我吗?

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

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

也就是说,对你的代码没有任何影响,但是有两个集合,一个集合被Set为另一个,交替其中一个也会影响另一个。

如果你还有问题,就问。 🙂

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

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

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