VBA Array function converts variable with a simple type to a value and does not store variable reference. But if I pass a class variable it works as intended. Is it supposed to be like that or I'm missing something?
main module
Sub test()
Dim collection As collection
Set collection = New collection
Dim i As Long
Dim cl As New tst
i = 25
cl.i = 25
Debug.Print "Original i = " & i
Debug.Print "Original cl.i = " & cl.i
Debug.Print
collection.Add Item:=Array(i)
collection.Add Item:=Array(cl)
Debug.Print "i in array in collection: collection(1)(0) = " & collection(1)(0)
Debug.Print "i from class in array in collection: collection(2)(0).i = " & collection(2)(0).i
Debug.Print
i = i + 1
cl.i = cl.i + 1
Debug.Print "Adding: i = i + 1"
Debug.Print
Debug.Print "Original i = " & i ' 26
Debug.Print "Original cl.i = " & cl.i '26
Debug.Print
Debug.Print "i in array in collection: collection(1)(0) = " & collection(1)(0) '25, but I expect 26
Debug.Print "i from class in array in collection: collection(2)(0).i = " & collection(2)(0).i '26 correct
Debug.Print
End Sub
class tst
Public i As Long
Output
Original i = 25
Original cl.i = 25
i in array in collection: collection(1)(0) = 25
i from class in array in collection: collection(2)(0).i = 25
Adding: i = i + 1
Original i = 26
Original cl.i = 26
i in array in collection: collection(1)(0) = 25
i from class in array in collection: collection(2)(0).i = 26