ReDim保留了什么?

我在看别人的VBA的Excel代码。 他们在两个循环中执行ReDim Preserve dataMatrix(7, i) 。 这是做什么的?

另外,好像第二个循环刚刚覆盖第一个循环中的数据,这是正确的吗?

 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保留数组中的数据。 另外,它不应该覆盖数据,因为每循环迭代i都会增加:第一个循环不会停止,直到它遇到一个空单元格,每次迭代一个数组长度改变,这样当长度为8它会添加1i和新的长度成为9 。 当第二次迭代发生时,它将新元素写入索引为9的数组边界,再次修改它的长度,使它变成1元素,迭代直到遇到空行。

Redim Preserve允许您在保持数组内容的同时更改数组的维数。

每个循环结束时的Redim Preserve会向数组中添加另一行。

我认为第二个循环附加到数组,因为ivariables不会在循环之间改变。