我正在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吗?
答案 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