我找到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
但它会返回此错误:
你能帮助我吗?
答案 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)))