传递集合数组作为参数

时间:2019-07-12 17:43:13

标签: arrays excel vba parameters

在Excel-VBA上,我有一个要传递给函数的集合数组(试图用作哈希表)。

这是我最初的食物。

Dim hashArray(200) As New Collection

populateHashArray(hashArray)
Function populateHashArray(data As Variant)
    data(2).Add "value"
End Function

每当代码从data(2).Add "value"行触发时,都会出现以下错误:对象变量或未设置块变量。

首次尝试修复:我试图将功能参数从“作为变体”更改为“作为集合”

Function populateHashArray(data As Collection)
    data(2).Add "value"
End Function

这使我的ByRef不匹配

你们中的任何一个都知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是在数组声明中使用New的副作用-您设置了自动实例化情况,该情况仅适用于调用子,而不适用于被调用函数。

说明:

Sub Tester()

    Dim hashArray(200) As New Collection

    Debug.Print "hashArray(2) = ", TypeName(hashArray(2)) '>> Collection

    populateHashArray hashArray

End Sub

Function populateHashArray(data() As Collection)
    Debug.Print "data(1) in function = ", TypeName(data(1)) '>> Nothing
    Debug.Print "data(2) in function = ", TypeName(data(2)) '>> Collection
End Function

Tester 中引用hashArray(2)会自动在数组中的该位置创建一个Collection实例,并且该实例仍在 populateHashArray 中。

Tester 中未引用

hashArray(1),因此在 populateHashArray data(1)为空(无)。

有关此内容的更多信息:What is the reason for not instantiating an object at the time of declaration?