Each time you execute the ReDim statement, all the values currently stored in
the array are lost. Visual Basic resets the values to the Empty value (for
Variant arrays), to zero (for numeric arrays), to a zero-length string (for
string arrays), or to Nothing (for arrays of objects).
This is useful when you want to prepare the array for new data, or when you
want to shrink the size of the array to take up minimal memory. Sometimes you
may want to change the size of the array without losing the data in the array.
You can do this by using ReDim with the Preserve keyword. For example, you can
enlarge an array by one element without losing the values of the existing
elements using the UBound function to refer to the upper bound:
ReDim Preserve DynArray(UBound(DynArray) + 1)
Only the upper bound of the last dimension in a multidimensional array can be
changed when you use the Preserve keyword; if you change any of the other
dimensions, or the lower bound of the last dimension, a run-time error occurs.
Thus, you can use code like this:
ReDim Preserve Matrix(10, UBound(Matrix, 2) + 1)
But you cannot use this code:
ReDim Preserve Matrix(UBound(Matrix, 1) + 1, 10)