在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不匹配
你们中的任何一个都知道如何解决这个问题吗?
答案 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 中。
hashArray(1)
,因此在 populateHashArray 中data(1)
为空(无)。
有关此内容的更多信息:What is the reason for not instantiating an object at the time of declaration?