VBA数组长度取决于用户输入

时间:2014-01-05 08:43:07

标签: arrays excel vba excel-vba

我希望创建一个简单的双精度VBA数组,但我希望数组的长度由工作表的单元格值指定。

我尝试做:

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

Dim myArray(1 To NIteration) As Double

失败并出现此错误:“需要持续表达”

1 个答案:

答案 0 :(得分:9)

听起来您想要使用VB的Redim关键字。

Redim允许您在运行时将数组的大小重新定义为给定的上限。

动态数组变量

如果您事先不知道存储信息所需的元素数量,那么动态数组变量非常有用。

您声明动态数组变量就像静态数组变量一样,除了您没有提供有关数组大小的任何信息。

例如,如果你有:

Dim SheetNames(1 to 10) As String

如果工作表数量超过10,则会抛出错误,因为SheetNames无法在集合中存储超过10个项目。

相反,我们使用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