簡體   English   中英

傳遞集合數組作為參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM