[AccessD] ReDim Preserve a multidimensional array

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




More information about the AccessD mailing list