2014-01-05 83 views
3

我希望創建一個簡單的雙精度VBA數組,但我希望數組的長度由工作表的單元格值指定。取決於用戶輸入的VBA數組長度

我嘗試這樣做:

Dim NIteration As Integer: NIteration = ActiveSheet.Cells(16, 2).Value 

Dim myArray(1 To NIteration) As Double 

它失敗,此錯誤:「需要常量表達式」

+0

我認爲這會工作'昏暗myArray的(NIteration)爲Double'。如果不是,Phil有完整的細節。 – L42

+0

經過測試,這不起作用 – Jamesszm

回答

9

這聽起來像你想利用VB的Redim關鍵字。

Redim允許您在運行時將數組大小重新定義爲給定的上限。

動態數組變量

動態數組變量是當你事先不知道你需要存儲有關的信息有多少元素有用。

除非您不提供有關數組大小的任何信息,否則就像靜態數組變量一樣聲明動態數組變量。

舉個例子,如果您有:如果張數超過10,因爲SheetNames將不能超過10項存儲庫的集合中

Dim SheetNames(1 to 10) As String 

錯誤將被拋出。

相反,我們使用如下的redim關鍵字:

Sub Test() 
    Dim MyArray() As String ' declare an array 
    Dim iCount As Integer 
    Dim Max As Integer 
    Max = ActiveSheet.Cells(16, 2).Value ' finds the maximum array size 

    ReDim MyArray(1 To Max) ' redeclares the array variable with the necessary size 

    For iCount = 1 To Max 
    MyArray(iCount) = ThisWorkbook.Sheets(iCount).Name ' (or whatever you're storing in the array) 
    MsgBox MyArray(iCount) 
    Next iCount 

    Erase MyArray() ' deletes the variable contents 
End Sub 
+0

謝謝,這是現貨! – Jamesszm