我不喜欢未初始化的VBA数组,因为每次使用if array is initialized或UBound()
以避免异常之前,都必须检查For Each
,并且没有本机VBA函数来检查它。这就是为什么我初始化数组,至少使用a = Array()
将其清空。在大多数情况下,这消除了额外检查的需要,因此一维数组没有问题。
出于相同的原因,我试图创建一个空的2d数组。不能简单地执行ReDim a(0 To -1, 0 To 0)
,转置1d空数组或类似的操作。我偶然碰到的唯一方法是使用MSForms.ComboBox
,将空数组分配给.List
属性,然后将其读回。这是在Excel和Word中运行的示例,您需要将UserForm
插入VBA Project,在其上放置ComboBox
,然后添加以下代码:
Private Sub ComboBox1_Change()
Dim a()
ComboBox1.List = Array()
a = ComboBox1.List
Debug.Print "1st dimension upper bound = " & UBound(a, 1)
Debug.Print "2nd dimension upper bound = " & UBound(a, 2)
End Sub
组合更改后,输出为:
1st dimension upper bound = -1
2nd dimension upper bound = 0
实际上,它实际上是调试中的空2d数组:
是否有一种更优雅的方法来创建一个空的2d数组,而通常不使用ComboBox
或UserForm
控件?
让我知道这是否属于您要实现的目标: