设置数组值会导致Visual Basic中的Argument不是可选错误

时间:2014-07-31 17:53:20

标签: arrays vba

我正在尝试在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

1 个答案:

答案 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