Redim serve per modificare la dimensione di un array una volta impostata, permettendoti anche di non perderne il contenuto. Quando crei un array con Dim di una certa dimensione se vuoi modificare tale dimensione in questo caso si usa Redim Preserve per non perderne il contenuto, una Dim con un nuovo valore ti andrebbe a cancellare il contenuto dell'array. Si usa anche quando crei un array e non sai di quanti elementi deve essere, quando il numero di elementi ti è noto allora con Redim puoi impostargli la dimensione. Con gli array dinamici, cioè array nei quali la dimensione in fase di creazione non è specificata, il Redim non dovrebbe servire in quanto dovrebbe modificarsi in automatico la dimensione, spesso pero' non accade, non so ancora bene il motivo, come il tuo caso in cui l'array creato non aveva dimensione, per questo di dava errore, non c'erano indici disponibili. Dai anche un'occhiata all'help di VB, e dato che devi usare gli array non si sa mai possano servirti cerca Join e Split, Join dato un array ti crea una stringa contenente gli elementi dell'array separati da un delimitatore, Split ti crea un array partendo da una stringa contenente elementi separati da un delimitatore. Sono funzioni spesso molto utili.