【问题标题】:Re-initialize Dynamic Array重新初始化动态数组
【发布时间】:2016-06-13 12:20:55
【问题描述】:

当我使用 Range.Value 函数时,我有大量单元格(大约 30,000 行,60 列)溢出。这似乎是因为 Range.Value 函数创建的内存管理数组不够大。如果我声明一个数组,那么它工作得很好。所以我需要一个动态数组变量,我可以将其设置为 Range.Value,将数据传输到工作表上的其他位置,然后为下一个大范围重新初始化它。我一生都无法找到有关如何重新初始化动态数组的信息。

如果我使用Erase myArray,那么我似乎不能再为变量赋值,但我也不能再次Dim 数组。如果我Redim,我将不得不创建很多复杂的函数来手动查找我的数组的大小。这里的诀窍是什么?

【问题讨论】:

  • 我想我在这里遗漏了一些东西,但“Redim”应该可以简单地工作,它是这里最好的解决方案。您能否举例说明为什么它会使您的代码复杂化?

标签: arrays excel vba dynamic


【解决方案1】:

您可以使用新的范围值覆盖现有数组。

如果新范围内的行/列数少于先前分配给数组的行/列,它仍会擦除先前在数组中的所有数据 - 仅将新范围值分配给数组。

Sub populateArray()

    Dim arrValues() As Variant

    arrValues = Range("B1:B6")
    arrValues = Range("A1:A4")

End Sub

arrValues 在分配Range("A1:A4") 后将只包含 4 行数据,即使之前分配了 6 行数据 Range("B1:B6")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多