动态标注VBA阵列?

时间:2010-12-01 16:41:58

标签: arrays vba

为什么我无法根据变量设置数组的大小?最好的方法是什么?

Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie

4 个答案:

答案 0 :(得分:41)

如果在运行时之前不知道它将包含的值的数量,则可以使用动态数组

Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)

如果您正在创建一个过程本地的数组,那么您可以使用一个语句执行所有操作:

ReDim Zombies(NumberOfZombies) As Integer

固定大小的数组要求在编译时知道包含的元素数。这就是为什么你不能使用变量来设置数组的大小 - 按定义,变量的值是可变的,只在运行时才知道。

如果您知道变量的值不会改变,则可以使用常量:

Const NumberOfZombies = 2000

但是没有办法在常量和变量之间进行转换。它们的含义截然不同。

答案 1 :(得分:3)

您必须使用ReDim语句来动态调整数组大小。

Public Sub Test()
    Dim NumberOfZombies As Integer
    NumberOfZombies = 20000
    Dim Zombies() As New Zombie
    ReDim Zombies(NumberOfZombies)

End Sub

当你已经知道阵列的大小时,这看起来很奇怪,但你去了!

答案 2 :(得分:2)

您还可以查看使用Collection Object。这通常比自定义对象的数组更好,因为它动态调整大小并具有以下方法:

  • 添加
  • 计数
  • 删除
  • 项(索引)

另外,它通常更容易在循环中循环,因为您可以非常轻松地使用for ...每个结构。

答案 3 :(得分:1)

您需要使用常量。

CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies

或者如果你想使用变量,你必须这样做:

Dim NumberOfZombies As Integer
NumberOfZombies = 20000

Dim Zombies() As Zombies

ReDim Zombies(NumberOfZombies)