Gustav Brock
Gustav at cactus.dk
Wed Dec 29 10:35:53 CST 2004
Hi all
Charlotte reminded recently that a Variant can nicely hold an array.
Just had to deal with how to ReDim a multidimensional array for another
dimension than the last while preserving the content.
You can't do that in VBA (browse the on-line help if in doubt), but
here's a workaround:
You can simulate it by copying the array via one temporary Variant.
Here's an example:
Public Sub ArrayCopy()
Dim avarA() As Variant
Dim avarT As Variant
Dim lngX As Long
Dim lngY As Long
ReDim avarA(0 To 1, 0 To 1)
avarA(0, 0) = "AA"
avarA(1, 0) = "BA"
avarA(0, 1) = "AB"
avarA(1, 1) = "BB"
Debug.Print UBound(avarA, 1), UBound(avarA, 2)
Debug.Print LBound(avarA, 1), LBound(avarA, 2)
' Create copy of array.
avarT = avarA()
' ReDim to 10 as Ubound for first dimension and erase array.
ReDim avarA(LBound(avarA, 1) To 10, LBound(avarA, 2) To UBound(avarA,
2))
' Refill array from copy.
For lngX = LBound(avarT, 1) To UBound(avarT, 1)
For lngY = LBound(avarT, 2) To UBound(avarT, 2)
avarA(lngX, lngY) = avarT(lngX, lngY)
Next
Next
Debug.Print UBound(avarA, 1), UBound(avarA, 2)
Debug.Print LBound(avarA, 1), LBound(avarA, 2)
Debug.Print UBound(avarT, 1), UBound(avarT, 2)
Debug.Print LBound(avarT, 1), LBound(avarT, 2)
Debug.Print avarA(0, 0)
Debug.Print avarA(1, 0)
Debug.Print avarA(0, 1)
Debug.Print avarA(1, 1)
End Sub
/gustav