【问题标题】:What does ReDim Preserve do?ReDim Preserve 有什么作用?
【发布时间】:2010-05-26 19:15:04
【问题描述】:

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    每个循环末尾的Redim Preserve 正在向数组中添加另一行。

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

    【讨论】:

    • 另外,似乎第二个循环只是覆盖了第一个循环中的数据,对吗?
    • 不,第二个循环正在附加到数组中,因为 i 在循环之间没有重置。
    • 你的意思是?几天前我得到了一个赞成票,这引起了我的注意。我在 2 天前添加了评论,但我也在我的回答中回答了它。
    • 嗯,过去两年我的答案一直是“答案”。我这样做不是为了你的利益。我在这里,所以我为将来可能会看到它的任何人更新了 cmets。
    • 我不知道你是在开玩笑还是混蛋。如果你想搞笑,我很抱歉我有其他想法。
    【解决方案2】:

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

    【讨论】:

    • 似乎第二个循环只是覆盖了第一个循环中的数据,对吗?
    • 第二个循环不会覆盖第一个循环中的数据,因为在第一个循环之后我没有被重置。第二个循环将内容附加到第一个循环中生成的数据矩阵中。
    猜你喜欢
    • 2016-09-16
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多