The last paragraph of the following extract from the help on the REDIM
sTatement >>
Remarks
The ReDim statement is used to size or resize a dynamic array that has
already been formally declared using a Private, Public, or Dim statement with
empty parentheses (without dimension subscripts).
You can use the ReDim statement repeatedly to change the number of elements
and dimensions in an array. However, you can't declare an array of one data
type and later use ReDim to change the array to another data type, unless the
array is contained in a Variant. If the array is contained in a Variant, the
type of the elements can be changed using an As type clause, unless you’re
using the Preserve keyword, in which case, no changes of data type are
permitted.
If you use the Preserve keyword, you can resize only the last array
dimension and you can't change the number of dimensions at all. For example,
if your array has only one dimension, you can resize that dimension because
it is the last and only dimension. However, if your array has two or more
dimensions, you can change the size of only the last dimension and still
preserve the contents of the array. The following example shows how you can
increase the size of the last dimension of a dynamic array without erasing
any existing data contained in the array.
ReDim X(10, 10, 10)
.. . .
ReDim Preserve X(10, 10, 15)
Similarly, when you use Preserve, you can change the size of the array only
by changing the upper bound; changing the lower bound causes an error.
If you make an array smaller than it was, data in the eliminated elements
will be lost. If you pass an array to a procedure by reference, you can't
redimension the array within the procedure.
I take it I have to pass it by reference if I want to change the values (and
size).
Regards