Sí, que busca la declaración ReDim
, que asigna dinámicamente la cantidad necesaria de espacio en la matriz.
la siguiente declaración
Dim MyArray()
declara una matriz sin dimensiones, por lo que el compilador no sabe lo grande que es y no puede almacenar cualquier cosa dentro de ella.
Pero se puede utilizar la instrucción ReDim
cambiar el tamaño de la matriz:
ReDim MyArray(0 To 3)
Y si necesita cambiar el tamaño de la matriz, mientras que preservar su contenido, puede utilizar la palabra clave Preserve
junto con la declaración ReDim
:
ReDim Preserve MyArray(0 To 3)
Pero tenga en cuenta que tanto ReDim
y en particular ReDim Preserve
tienen un costo de rendimiento pesado. Intente evitar hacer esto una y otra vez en un ciclo si es posible; tus usuarios te lo agradecerán
Sin embargo, en el sencillo ejemplo que se muestra en su pregunta (si no es sólo una muestra de usar y tirar), no es necesario ReDim
en absoluto. Sólo declarar la matriz con las dimensiones explícitas:
Dim MyArray(0 To 3)
¿Por qué lo harías * en * el ciclo? 'ReDim', y especialmente cuando agrega' Preserve', es un potencial asesino de rendimiento. Ya sabes cuántas veces va a iterar el ciclo, así que definitivamente hazlo fuera del ciclo. Entonces solo estás cambiando el tamaño de la matriz una vez, y no necesitas la 'Reserva '. –
@CodyGray Tiene toda la razón si el tamaño final de la matriz ya está definido al ingresar al ciclo. Poner el Redim dentro del circuito sería un asesino de rendimiento. Sin embargo, asumí que el tamaño de la matriz no se determina al ingresar al ciclo. De lo contrario, la muestra completa no tiene ningún sentido ... – Fluffi1974
Tiene * que definirse * al ingresar al ciclo. Tienes que definir el rango del bucle. Incluso si es una variable en lugar de una constante como '3', todavía está especificando un límite superior en la instrucción' For'. Úselo para inicializar dinámicamente el tamaño de la matriz. –