如果您使用此代码并运行它,您会看到数组的初始化以1开头而不是0开始。
Option Explicit
Public Sub TestMe()
Dim x() As Variant
x = [{"A", "B"}]
PrintArray x
'this gives an error:
'Debug.Print x.Count
'-----------------------------------------------------------------
Dim k As Variant
k = Array("C", "D")
PrintArray k
End Sub
Public Sub PrintArray(ByRef myArray As Variant)
Dim lngCounter As Long
For lngCounter = LBound(myArray) To UBound(myArray)
Debug.Print lngCounter; " -> "; myArray(lngCounter)
Next lngCounter
Debug.Print TypeName(myArray)
End Sub
知道为什么吗? 这是即时窗口:
1 -> A
2 -> B
Variant()
0 -> C
1 -> D
Variant()
它看起来像Collection
,但当我debug.print x.count
时,它会出错。
如果它是range
,那么它应该在TypeName中给出一个范围,如下所示:
Public Sub TestMe()
Dim p As Variant
Set p = Range("A1")
Debug.Print TypeName(p)
End Sub
答案 0 :(得分:2)
使用值初始化数组时,它将始终使用标准VBA Lbound为1。
使用Array()初始化数组时,它将使用您在Option Base中指定的任何内容(默认为0)。
如果您将Option Base 1
放在模块的开头,并运行测试,您将看到它一直运行。
MSDN on Array()