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小时内删除。
发表评论