VBA中的:常量、变量和数组
变量可以更改存储在其中的数据,而常量不可以,这就是常量和变量最主要的区别。常量是用来存储一些固定不变的数据。
一、常量
1、声明常量时,应同时给常量赋值,语法如下:
const 常量名称 as 数据类型=常量数据
2、常量的作用域
在过程内使用const语句声明的常量为本地常量,只可以在声明常量的过程中使用;
在模块的第一个过程之前使用const语句声明的常量为模块级常量,可以在该模块的所有过程使用;
在模块的第一个过程之前使用public语句声明的常量为公共常量,公共常量可以在所有模块中使用。
二、变量
1、声明变量,语法:
dim 变量名 as 数据类型
其它声明变量的语句:
private 变量名 as 数据类型        '定义私有变量。
public 变量名 as 数据类型         '定义公有变量。
static  变量名 as 数据类型         '定义静态变量。当程序结束后,静态变量的值会保持不变
2、变量赋值
(1)常用变量赋值
常用变量如:文本、数值、日期、时间、逻辑值等变量,赋值方法:
[let] 变量名=要存储的数据             'let可以省略
如:
dim i as integer
i=10
(2)对象变量赋值
对象变量如:工作簿、工作表、单元格等变量,赋值方法:
set 变量名=要存储的对象名称
如:
dim sht as worksheet           '定义sht为工作表对象变量
set sht=activesheet              '将活动工作表赋给sht对象变量
代码示例:
sub 数据类变量()
dim i as integer                '定义i为integer类型变量
i=10                                  '将10赋给变量i
range("A1").value=i       '将变量i的值,赋给活动工作表的A1单元格
end sub
代码示例:
sub 对象类变量()
dim sht as worksheet                                   '定义sht为工作表对象变量
set sht=activesheet                                     '将活动工作表赋给sht对象变量
sht.range("A1").value="引用对象变量"       '将“引用对象变量”赋给变量sht存储的工作表中                                                                          '的A1单元格
end sub
3、变量的作用域
按作用域分,变量可分为:本地变量、模块变量、公共变量。
变量类型
描述及作用域
本地变量
在过程内使用dim或static语句声明的变量。其作用域(作用范围)为本过程,即只在声明该变量的过程内使用,其它过程不能使用。
模块变量
在模块的第一个过程之前使用dim或private语句声明的变量。其作用域为本模块,即该模块的所有过程都可以使用。
公共变量
在模块的第一个过程之前使用public语句声明的变量。其作用域为所有模块,即所有模块中的所有过程都可以使用。
4、特殊变量:数组
数组也是变量,是同种类型的多个变量的集合。数组分为一维数组、多维数组。多维数组中二维数组用得最多。数组跟其它变量的声明一样,不同的是数组要设置起始和终止索引值。
一维数组声明:
dim 数组名(起始值 to 终止值) as 数据类型
二维数组声明:
dim 数组名(一维起始值 to 一维终止值,二维起始值 to 二维终止值) as 数据类型 
如:
dim arr(1 to 10) as integer                    '声明arr一维数组,索引值从1到10
dim arr(1 to 10,1 to 30) as integer       '声明arr二维数组,一维索引值从1到10,二维从1到30
注意:起始索引值可以省略,如arr(10),arr(4,5),如果起始索引值省略的话,VBA默认起始索引值从0开始。如果要更改默认起始索引值从1开始,必须在模块的第一句写上“Option base 1”。
5、动态数组
当不能确定数组维数大小时,可以先定义一个没有维数的数组,在以后通过Redim语句重新定义其维数的大小,这样的数组就是动态数组。
语法:
dim 数组名(  ) as 数据类型
.
.
.
Redim 数组名(a,b)
示例代码:
sub test()
dim a as integer
a=Application.WorkSheetFunction.CountA(range("A:A"))  '用工作表函数counta求当
'前工作表A列中非空单元
'格个数,并赋给变量a
dim arr( ) as String                                                                  '定义动态数组
redim arr(1 to a)                                                                     '重定义动态数组
end sub
6、利用函数创建数组
(1)使用array函数创建数组
如果要将一组已知的数据存储到数组中,使用VBA中的array函数非常方便。如示例代码:
sub array函数创建数组()
dim arr as variant                  '定义arr为variant数据类型变量
arr=array(10,20,30,40)          '使用array函数给arr数组赋值
msgbox "arr数组的第二个元素为:" & arr(1)      '用对话框显示arr数组的第二个元素
end sub
注:用array函数创建的数组,其起始索引号从0开始,除非已经在模块第一句写入"option base 1"。
(2)使用split函数创建数组
如果要将一个字符串按指定的分隔符拆分,将各部分保存到一个数组中,可以使用VBA的split函数。
split函数的语法格式如下:
Split(expression, [ delimiter,] [ limit,] [ compare ])
参数
参数含义
expression
需要拆分的含分隔符的字符串
delimiter
参数为拆分的分隔符,如果省略则使用空格做为分隔符
limit
指定返回字符串的数量
compare
指定拆分子字符串时的比较类型
示例代码:
sub split函数创建数组()
dim arr as variant
vb字符串常量arr=split("黄河,长江,长城,故宫",",")      '以“,”为分隔符,对“黄河,长江,长城,故宫”进行分隔
msgbox "arr数组的第二个元素是:" & arr(1)
end sub
注:split函数创建的数组的起始索引号总是从0开始,不管已经在模块第一句写入"option base 1"。.
7、通过单元格区域创建数组
如果要把单元格区域中的数据存储到数组中,可以通过如下代码示例:
sub 单元格区域数据赋给数组()
dim arr as variant                      '定义arr变量为variant类型
arr=range("A1:C3").value         '将活动表的A1:C3数据赋给数组arr
range("E1:G3").value=arr        '将arr数组的值赋给活动表的E1:G3单元格区域
end sub
注:用单元格区域数据给数组赋值,得到的数组是二维数组,并且数组的起始索引号总是从1开始。
8、利用函数求数组的最大索引号和最小索引号
(1)用ubound函数求数组的最大索引号
语句:Ubound(数组名称,维数)
如果求多维数组某维的最大索引号,要指定该维数。
代码示例:
sub 求数组最大索引号()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。