对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中进行验证.

   

posted @ 2013-03-14 15:46  surfacetension  阅读(441)  评论(0编辑  收藏  举报