ReDim Preserve有什么作用?

时间:2010-05-26 19:15:05

标签: excel vba excel-vba

我在看别人的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

2 个答案:

答案 0 :(得分:17)

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

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

我认为第二个循环附加到数组,因为i变量在循环之间没有变化。

答案 1 :(得分:12)

修改其大小时,

ReDim会保留数组中的数据。此外,它不应该覆盖数据,因为在循环的每次迭代中i都会递增:第一个循环不会停止,直到它遇到一个空单元格,每次迭代时将数组长度改为1,这样当长度为1时8 1i添加到9,新长度变为9。当第二次迭代发生时,它将新元素写入索引为1的数组的边界,再次修改其长度,使其变为{{1}}元素更长并迭代直到遇到空行。

相关问题