在VBA Excel中重用2D数组?

时间:2013-12-03 17:02:46

标签: arrays excel vba excel-vba

这里是新手,也是VBA和编程的新手。

我正在尝试重用多个数组(通过循环),但我想我需要在重用之前清除它们?我尝试过搜索问题,但我找不到解决方案,或者坦率地说,如果它们有效,就无法理解解决方案。

Dim WS As Worksheet

For Each WS In Worksheets
    If Right(WS.Name, 4) = "Data" Then Comp = Comp + 1
Next WS

Dim CompArray(10, 50) As Variant
Dim RatesArray(10, 1 To 50) As Variant
Dim IndexArray(10, 50) As Variant
Dim ShortIndexArray(10) As Long
Dim MRow, DRow, FRow, RRow, Col As Long
Dim LastCol, LastRow As Long

MRow = 4
LastRow = Cells(Rows.Count, 1).End(xlUp).Row


Do Until MRow > LastRow

    '**** MY CODE ****

''''***!!!*** Trying to Clear the array and reuse with the same dimensions for each loop ***!!!***
' not working

''Erase CompArray, RatesArray, IndexArray, ShortIndexArray
''ReDim CompArray(10, 50)
''ReDim RatesArray(10, 1 To 50)
''ReDim IndexArray(10, 50)
''ReDim ShortIndexArray(10)

MRow = MRow + 6 + Comp
Loop




End Sub

所以当我进入主循环的下一步时,我想要使用的数组具有相同的信息。我想保留数组的相同名称和维度,但只是清除内容。这听起来很简单,但我不知道该怎么做。

我尝试了擦除和重新编写(这是一个类似问题的解决方案),但它没有用,它实际上是在说我两次声明数组。

我还尝试在循环中调暗数组。这也不起作用。

任何帮助将不胜感激!

感谢。

1 个答案:

答案 0 :(得分:4)

如果要重复使用数组,则在首次声明时不应指定尺寸

Dim CompArray() As Variant

然后,当您想要初始化它时,请使用关键字Redim

ReDim CompArray(10, 50)

如果您再次重新调整数组,那么除非使用Preserve关键字

,否则您将丢失已存储在其中的所有数据
ReDim Preserve CompArray(10, 60)

如果您要对数组进行重新定义并保留内容,则只能更改最后一个维度

所以ReDim Preserve CompArray(10, 80)会在您更改最后一个元素时起作用。当您尝试更改第一个元素并保留数据时,ReDim Preserve CompArray(100, 80)会导致错误。

ReDim CompArray(100, 800)可以正常使用,但您将丢失所有当前存储的数据。