我正在尝试在For循环中设置Collections数组的值。但是,当我去运行该程序时,它会抛出一个编译错误,指出" Argument不是可选的"并突出显示我设置数组值的部分。当我去调试子程序时,我无法超越ConvertbucketCollectionTobucketArray()的第一行。此时,bucketArray元素0到12的值为Nothing,bucketCollection包含13个元素(1-13),其中只有几个包含项目。
Dim bucketCollection As New Collection 'the Collection of buckets
Dim bucketArray(12) As New Collection 'bucketCollection as an array
...
Private Sub ConvertbucketCollectionTobucketArray() 'debugger stops here
Dim newCol As Collection
Dim i As Integer
For i = 1 To bucketCollection.count
Set newCol = bucketCollection.Item(i)
bucketArray(i - 1) = newCol 'highlighted line here
Next
End Sub
答案 0 :(得分:1)
由于collection是一个对象,因此在将其复制到元素时必须使用set(这是您的错误)。
Set bucketArray(i - 1) = newCol
这不会导致错误,但不需要将数组设置为新数据。
Dim bucketArray(12) As Collection
如果bucketCollection是一个类范围的变量,你应该分开创建一个新实例并声明它。在其中一个函数中创建它的新实例。否则,如果您运行相同的代码两次,它可能会使用相同的实例。
Sub test()
Set bucketCollection = New Collection
populate
ConvertbucketCollectionTobucketArray
End Sub