【笔记】VB的数组

前言

VB的数组学习笔记

一维数组

静态数组的声明

定义数组的个数

一次定义一个数组
1
Dim 数组名(...)
一次定义多个数组
1
Dim 数组名(...), 数组名(...)

指定数据类型的方式

不指定数据类型
  • 不指定数据类型,默认为变体型
1
Dim 数组名(...)
直接指定数据类型
1
Dim 数组名(...) As 数据类型
通过类型标识符定义数据类型
1
Dim 数组名类型标识符(...)

指定数组长度的方式

指定开始索引和结束索引
1
Dim 数组名(索引最小值 To 索引最大值)
仅指定结束索引
  • 没有指定开始索引时,默认开始索引为0
1
Dim 数组名(索引最大值)
统一指定所有区间的最小值
  • 使用Option Base关键字指定的下标起始值,如果定义多维数组,对每维数组都有效
1
2
Option Base 最小索引
Dim 数组名(索引最大值)

动态数组的声明

  • 声明数组时(Dim)动态数组未分配存储空间,不能引用
  • 重新声明数组后(ReDim),才能确定其维数和大小,此时才分配存储空间
    • 可以多次重新声明数组,多次改变动态数组的长度和维数,但是不能改变数组的数据类型

指定数据类型的方式

不指定数据类型
1
2
3
4
5
6
7
8
9
' 定义动态数组
Dim 数组名()

' 定义/改变数组的长度
ReDim 数组名(索引最小值 To 索引最大值)
ReDim 数组名(索引最大值)

' 定义/改变数组的维数
ReDim 数组名(一维数组的下标定义, 二位数组的下标定义, ...)
直接指定数据类型
1
2
3
4
5
6
7
8
9
' 定义动态数组
Dim 数组名() As 数据类型

' 定义/改变数组的长度
ReDim 数组名(索引最小值 To 索引最大值) As 数据类型
ReDim 数组名(索引最大值) As 数据类型

' 定义/改变数组的维数
ReDim 数组名(一维数组的下标定义, 二位数组的下标定义, ...) As 数据类型
通过类型标识符定义数据类型
1
2
3
4
5
6
7
8
9
' 定义动态数组
Dim 数组名类型标识符()

' 定义/改变数组的长度
ReDim 数组名类型标识符(索引最小值 To 索引最大值)
ReDim 数组名类型标识符(索引最大值)

' 定义/改变数组的维数
ReDim 数组名类型标识符(一维数组的下标定义, 二位数组的下标定义, ...)

关于数据的保存

  • 重新声明数组后(ReDim),所有的数据都会被清空,如果不希望数据被清空,可以使用关键字Preserve
1
2
3
4
5
6
' 定义动态数组
Dim 数组名()

' 定义/改变数组的长度
ReDim 数组名(索引最小值 To 索引最大值)
ReDim 数组名(索引最大值)

关于维数的修改

  • 重新声明数组时(ReDim),如果修改的原数组是多维数组,只能修改最后一维的下标索引最小值,并且不能修改数组的维数
1
2
3
4
5
' 定义动态数组
Dim 数组名(一维数组的下标定义, 二位数组的下标定义)

' 定义/改变数组的维数
ReDim 数组名(一维数组的下标定义, 二位数组的下标定义)

数组中元素的赋值

为指定下标的元素赋值

1
数组名(下标) = 值

通过Array函数为所有元素赋值

  • 通过Array()函数,可以在编译阶段为数组赋值,因此无需占用运行时间,可以提高程序执行的效率
1
数组名 = Array(值1, 值2, ...)
为动态数组赋值
1
数组名() = Array(值1, 值2, ...)

通过字符串分割为所有元素赋值

1
数组名 = Split(字符串, 分隔符)

数组中元素值的获取

1
数组名(下标)

多维数组

数组的声明

1
Dim 数组名(一维数组的下标定义, 二位数组的下标定义, ...)

数组中元素的赋值

1
数组名(一维数组的下标, 二维数组的下标, ...) = 值

数组中元素值的获取

获取数组中元素的值

1
数组名(一维数组的下标, 二维数组的下标, ...)

获取数组的下标最小值和最大值

获取数组的下标最小值

维数:从1开始

1
2
3
LBound(数组名)

LBound(数组名, 维数)

获取数组的下标最大值

1
2
3
UBound(数组名)

UBound(数组名, 维数)

遍历数组

For循环

1
2
3
For i = LBound(数组名) To UBound(数组名)
...
Next i

For…Each循环

  • For…Each循环会从数组下标为0开始遍历
1
2
3
For Each i In 数组名
...
Next i

控件数组

  • 控件数组中的所有元素都必须是相同类型的控件
  • 控件数组中的控件具有一个相同的控件名称
  • 控件数组中的控件除了名称属性值外,其他属性可以不相同
  • 控件数组中的元素是通过控件的Index属性进行区分的,取值范围为:0~32767
  • 控件数组元素的下标可以不连续
  • 控件数组中的所有控件共用相同的事件,控件数组的事件过程名后的一对括号内有一个参数Index,用来确定是哪一个控件发生了该事件

创建控件数组

方法一

  • 通过复制粘贴控件的方式

第创建第一个控件时,其Index属性值为空
当粘贴了一个控件后
粘贴前的控件Index属性值为0
粘贴后的控件Index属性值为1
其后粘贴的控件Index依次+1

方法二

  • 创建第二个相同类型的控件时,指定与第一个控件相同的控件名称

方法三

  • 创建控件时,修改Index属性

添加和删除数组中的元素

  • 向已有的控件数组中添加一个元素

在使用Load()方法之前,需要在设计模式下创建控件数组
使用Load()方法添加的元素,默认是不可见的,Visible属性的值默认为False,需要手动改为True才能显示出来
添加后的元素需要设置Left属性和Top属性来修改元素在窗体上的位置

1
Load 控件数组名(下标)
  • 从已有的控件数组中删除一个元素

只能删除用Load()方法添加的控件,不能删除通过设计模式添加的控件

1
UnLoad 控件数组名(下标)

完成

参考文献

哔哩哔哩——教达优