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
它会添加1
到i
和新的长度成为9
。 当第二次迭代发生时,它将新元素写入索引为9
的数组边界,再次修改它的长度,使它变成1
元素,迭代直到遇到空行。
Redim Preserve
允许您在保持数组内容的同时更改数组的维数。
每个循环结束时的Redim Preserve
会向数组中添加另一行。
我认为第二个循环附加到数组,因为i
variables不会在循环之间改变。