3
我希望創建一個簡單的雙精度VBA數組,但我希望數組的長度由工作表的單元格值指定。取決於用戶輸入的VBA數組長度
我嘗試這樣做:
Dim NIteration As Integer: NIteration = ActiveSheet.Cells(16, 2).Value
Dim myArray(1 To NIteration) As Double
它失敗,此錯誤:「需要常量表達式」
我希望創建一個簡單的雙精度VBA數組,但我希望數組的長度由工作表的單元格值指定。取決於用戶輸入的VBA數組長度
我嘗試這樣做:
Dim NIteration As Integer: NIteration = ActiveSheet.Cells(16, 2).Value
Dim myArray(1 To NIteration) As Double
它失敗,此錯誤:「需要常量表達式」
這聽起來像你想利用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
謝謝,這是現貨! – Jamesszm
我認爲這會工作'昏暗myArray的(NIteration)爲Double'。如果不是,Phil有完整的細節。 – L42
經過測試,這不起作用 – Jamesszm