variable redimensionar redim example dinamico dimensional array excel vba excel-vba

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.