excel - redimensionar - ¿Qué hace ReDim Preserve?
vba array dinamico (2)
ReDim
conserva los datos en una matriz cuando modifica su tamaño. Además, no debe sobrescribir los datos, ya que i
se incrementa en cada iteración del bucle: el primer bucle no se detendrá hasta que encuentre una celda vacía, cambiando la longitud de la matriz en cada iteración, de modo que cuando la longitud es 8
agrega 1
a la i
y la nueva longitud se convierte en 9
. Cuando se produce la segunda iteración, escribe el nuevo elemento en el límite de la matriz con el índice 9
, modifica su longitud nuevamente para que se convierta en 1
elemento más largo e itere hasta que encuentre una línea vacía.
Estoy mirando el código de Excel VBA de otra persona. están haciendo ReDim Preserve dataMatrix(7, i)
en ambos bucles. ¿Qué hace esto?
Además, parece que el segundo bucle simplemente sobrescribe los datos en el primer bucle, ¿es correcto?
Dim dataMatrix() As String
Worksheets.Item("ETS").Select
Do While Trim(Cells(r, 1)) <> ""
Debug.Print "The line: ", Trim(Cells(r, 1)), r
r = r + 1
dataMatrix(1, i) = Trim(Cells(r, 1)) ''''file name
dataMatrix(2, i) = Trim(Cells(r, 2)) ''''sample type
dataMatrix(3, i) = Trim(Cells(r, 3)) ''''sample name
dataMatrix(4, i) = "ETS" ''''
dataMatrix(5, i) = Trim(Cells(r, 5)) ''''Response
dataMatrix(6, i) = Trim(Cells(r, 6)) ''''ISTD Response
dataMatrix(7, i) = Trim(Cells(r, 10)) ''''Calculated Conc
i = i + 1
ReDim Preserve dataMatrix(7, i)
Loop
r = 5
Worksheets.Item("ETG").Select
Do While Trim(Cells(r, 1)) <> ""
Debug.Print "The line: ", Trim(Cells(r, 1)), r
r = r + 1
dataMatrix(1, i) = Trim(Cells(r, 1)) ''''file name
dataMatrix(2, i) = Trim(Cells(r, 2)) ''''sample type
dataMatrix(3, i) = Trim(Cells(r, 3)) ''''sample name
dataMatrix(4, i) = "ETG"
dataMatrix(5, i) = Trim(Cells(r, 5)) ''''Response
dataMatrix(6, i) = Trim(Cells(r, 6)) ''''ISTD Response
dataMatrix(7, i) = Trim(Cells(r, 10)) ''''Calculated Conc
i = i + 1
ReDim Preserve dataMatrix(7, i)
Loop
Redim Preserve
permite cambiar las dimensiones de una matriz mientras mantiene el contenido de la matriz.
La Redim Preserve
al final de cada bucle está agregando otra fila a la matriz.
Creo que el segundo bucle se está agregando a la matriz porque la variable i
no se cambia entre los bucles.