2010-12-01 105 views
19

为什么我无法根据变量设置数组的大小?最好的解决办法是什么?动态标注VBA阵列?

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

回答

36

您可以使用动态数组,当你不知道值的数量而定包含直到运行时:

Dim Zombies() As Integer 
ReDim Zombies(NumberOfZombies) 

或者你可以,如果你创建一个数组这是当地一个过程与一个语句做的一切:

ReDim Zombies(NumberOfZombies) As Integer 

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

如果你知道变量的值,您可以使用一个常数不会改变:

Const NumberOfZombies = 2000 

,但没有办法,常量和变量之间施放。它们有明显不同的含义。

1

您需要使用常数。

CONST NumberOfZombies = 20000 
Dim Zombies(NumberOfZombies) As Zombies 

,或者如果你想使用你所要做的是这样一个变量:

Dim NumberOfZombies As Integer 
NumberOfZombies = 20000 

Dim Zombies() As Zombies 

ReDim Zombies(NumberOfZombies) 
+0

有没有更简单的方法在维度定义中将NumberOfZombies作为CONST右键? Dim Zombies(CONST NumberOfZombies)as new Zombie – sooprise 2010-12-01 16:44:58

+0

我在完成打字之前提交了答案。 – carny666 2010-12-01 16:46:30

3

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

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

End Sub 

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

2

你也可以看看使用集合对象。这通常作品比自定义对象的数组更好,因为它动态的大小,并且方法:

  • 添加
  • 计数
  • 删除
  • 项目(指数)

加上它通常更容易循环访问集合,因为您可以非常容易地使用for ... each结构与集合。