[英]Passing an Array of Collections as a Parameter
在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"
行時,都會出現以下錯誤: 對象變量或With塊變量未設置。
首次嘗試修復:我嘗試將功能參數從“ As Variant”更改為“ As Collection”
Function populateHashArray(data As Collection)
data(2).Add "value"
End Function
這給了我ByRef不匹配的情況
你們當中有人知道如何解決這個問題嗎?
這是在數組聲明中使用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)
為空(無)。
有關此內容的更多信息: 在聲明時不實例化對象的原因是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.