关于VBA中数组的一些问题

1.数组定义中Dim Arr() As Variant与Dim Arr As Variant的区别

Dim Arr As Variant只是定义了一个Variant型变量,不代表这是数组

Dim Arr() As Variant是定义了一个动态数组,数组中的元素是Variant型

2.数组下标的区别

数组默认下标可能为0或者1,具体情况如下

(1)使用方括号赋值或者从工作表Range读入数据并赋值给数组时,下标为1

方括号赋值举例:

[{"一", "二", "三", "四"}]    '一维数组

[{"五", "六";"七", "八"}]     '二维数组

工作表Range赋值时,即使只有一列数据,也是一个二维数组。

(2)利用Array()函数为数组赋值时,下标取决于Option Base语句

如有Option Base 1,数组下标为1;如有Option Base 0或省略该句,数组下标为0。

其中Option Base语句是模块级语句,必须写在模块的最前部分,且不能后续更改。

(3)如果未指定Option Base 1,且想用Array()函数批量赋值,并使下标为1,是做不到的,只能先定义下标为1的数组(动态数组Redim亦可),然后对元素依次赋值。

3.静态数组不允许Redim,动态数组允许Redim,Redim只允许改变最高维

例如:

Dim Arr(1 To 2) As Variant,不允许Redim Arr(1 To 3)

Dim Arr() As Variant,允许Redim Arr(1 To 3)

4.二维数组与数组嵌套

(1)方括号赋值可以直接对二维数组赋值,举例见2(1)部分

(2)Array()函数不能形成二维数组,只能是数组的嵌套

(3)二维数组必须是一个“矩形”,而数组嵌套则无此限制

举例:

Arr1=[{"一", "二"; "三", "四"}]    '允许

Arr2=[{"一", "二"; "三", "四", "五"}]    '不允许

Arr3=Array(Array("一", "二"), Array("三", "四", "五"))    '形成的是一维数组的嵌套,Arr3()有两个元素,都是数组,其中第一个数组有两个元素,第二个数组有三个数组

如果要引用Arr1中值为"三"的元素,代码为Arr(2,1);要引用Arr2中值为"三"的元素,代码为Arr(2)(1)。

posted @ 2022-02-10 21:40  cnblog_mo  阅读(975)  评论(0编辑  收藏  举报