在excel VBA中创建动态数组而不是“暗淡”时,有没有理由使用“redim”?

时间:2017-02-15 20:14:58

标签: arrays vba excel-vba multidimensional-array excel

我正在Excel VBA中创建一个二维动态数组。我能找到的大多数代码示例如下:

Dim companyArray() As Variant
Dim height, width As Integer
width = 2
height = WorksheetFunction.CountA(Worksheets(1).Columns(1))
ReDim companyArray(height, width)

在获得height变量的值后,我是否有理由不想声明数组?如果可能的话,我不想避免使用ReDim吗?

1 个答案:

答案 0 :(得分:5)

Dim companyArray(1 to 5)是静态大小调整:需要边界是编写代码时已知的常量。

Redim companyArray(1 to x)是动态大小调整,在程序运行时计算边界时需要。

当在编码时不知道任何边界(在任何维度上)时,Redim是唯一的选择。

提醒

Redim不需要变量变暗之前,你只需要声明并重新创建一个动态数组。 然而,这样做有一些风险。考虑一下这个

' Module
Dim X as variant ' some module-level (or global) variable
''''''''''''''''''
' Some code
'''''''''''''''''
Sub foo()
   Redim X(1 to 3) as long ' <-- Will redim the global X
   ....
End Sub

如果程序员在编写foo时的意图是一次性声明一个局部变量Redim it,那么这将失败,因为{{1} }语句将对全局X进行操作,因为它在范围内。

底线是Redim声明并重新声明变量如果其作用域中存在同名变量,它将重新生成该变量而不是创建新变量。出于这个原因,尽管不是绝对必要,但是在Redim之前使用Dim更加安全,遵循良好做法规则。

Redim