2010-12-01 107 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結構與集合。