If you use variable-length strings and/or dynamic arrays in a user-defined type (UDT), the actual data does not become part of the structure. Instead, four-byte pointers are stored in the structure, and the actual data is stored separately. Therefore, it doesn’t matter if the strings and/or arrays in variables A and B are different sizes; the type size is the same, assuming A and B are of the same UDT.
It also means that if you create an array with a UDT that itself includes dynamic arrays, any “inside” array inside one element of the “outside” array is physically distinct from the corresponding “inside” array of any other “outside” array element. Therefore, code along these lines is perfectly fine:
Type AnotherType Something As Integer SomethingElse As LongEnd TypeType SomeType Something As Integer InsideArr() As AnotherType SomethingElse As LongEnd TypeSub Test() ' set up outside array ReDim OutsideArr(1 To 4) As SomeType ' set up inside arrays ReDim OutsideArr(1).InsideArr(1 To 3) ReDim OutsideArr(2).InsideArr(1 To 7) ReDim OutsideArr(3).InsideArr(-4 To 0) ReDim OutsideArr(4).InsideArr(1 To 3, 2 To 14)End Sub
You can use this code to create psuedo-multidimensional, nonrectangular arrays, or arrays in which more than one dimension is resized using ReDim Preserve. Both are impossible with ordinary multidimmed arrays.