对VBA数组的再认识
疑问1:如果一个数组变量未定义维度(一维或二维),则其默认为一维?二维?更或多维?
两个方面:①若接下来直接对数组赋组的话,则会提示下标超界
1 Dim arr() As Integer 2 3 arr(1) = 1 4 5 arr(1, 1) = 1
第3句:提示下标超界;第5句:提示下标超界.
原因就是未使用Redim语句指定其下界和上界,改为下面的代码
1 Dim arr() As Integer 2 ReDim arr(3) 3 arr(1) = 1 4 MsgBox arr(1) 5 ReDim arr(3, 2) 6 arr(1, 1) = 1 7 MsgBox arr(1, 1)
此时程序通过.这是属于直接给数组赋值.
但若通过单元格数据直接给未定维度及上下界的数组直接赋值的话,就可以正确通过,并且此时默认就是二维数组.
并且此时生成的数组要受Option Base 1或0的影响,这点要特别注意.
写到这儿想到Split函数的应用中可以利用指定界定符将字符串进行分割,而Split函数返回的是一个一维数组,并且其起始下标是从0开始,这点不受Option Base 1的影响,写程序时要特别注意.
1 Dim arr() As String, y As Variant, myRng As Range 2 Set myRng = Range("A1:B3,C2:F4") 3 arr() = Split(myRng.Address, "$") 4 For Each y In arr 5 Debug.Print y 6 Next y 7 Debug.Print LBound(arr), UBound(arr)
第7句中Lbound(arr)输出为0,Ubound(arr)输出为8,请自行复制代码到VBA中进行验证.