ReDim Preserve有什么作用?

l--*_*''' 18 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
Run Code Online (Sandbox Code Playgroud)

aph*_*ria 18

Redim Preserve 允许您在保留数组内容的同时更改数组的大小.

Redim Preserve在每个循环结束时加入另一行到阵列.

我认为第二个循环附加到数组,因为i循环之间的变量没有改变.

  • 嗯,过去两年我的回答是"答案".我不是为了你的利益而做的.我在这里,所以我更新了任何可能在将来看它的人的评论. (2认同)

Yas*_*aev 13

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