- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据类型与变量
变量是指代码运行过程中不断变化的量,通过变量可以让VBA过程更强大、更灵活。
变量总是与数据类型同时出现的,每次定义变量都需要考虑其数据类型,所以数据类型与变量两个相关的概念放在本课时讲述。
本课时讲述数据类型与变量的其它知识点,同时也包含与变量相关的常量。
变量的作用域
变量的作用域是指变量的可调用范围,包括过程级、模块级和工程级三个级别。
变量的作用域由定义的方式和存放位置决定。定义动态变量采用Public、Private和Dim三种方式,它们之间的差别参见下表:
表1 变量的定义方式与作用域
语句
代码位置
作用域
说明
Public
模块顶部
模块级变量
所有模块皆可调用
Private
模块顶部
模块级变量
当前模块可以调用
Dim
模块顶部
模块级变量
当前模块可以调用
Dim
过程内部
过程级变量
当前过程可以调用
上表没有直观性,接下来通过几个操作步骤直观地比较一下三种声明模块级变量的语句的差异,以及了解Dim语句声明模块级和过程级变量的区别:
(1)新建工作簿,使用【Alt+F11】打开VBE窗口;
(2)单击【插入】\【模块】,从而创建“模块1”;
(3)在模块顶部分别采用三种声明方式声明三个模块级变量:
Public 模块级公有变量_A As String
Private 模块级私有变量_B As String
Dim 模块级私有变量_C As String
其中Public所声明的变量是公有变量,所以取名时也加上“公有变量”4个字便于区分。所谓的模块级公有变量是指所有模块都可以调用的变量,而模块级私有变量则只能当前模块才可以调用。
声明模块级变量的语句只能放在模块的顶部。
(4)继续录入以下两个过程的代码,第一个过程用于对变量赋值,第二个过程用于调用变量的值:
Sub One() 放置位置:模块中
模块级公有变量_A = Excel
模块级私有变量_B = VBA
模块级私有变量_C = 好犀利
End Sub
Sub Two() 放置位置:模块中
MsgBox 模块级公有变量_A Chr(13) 模块级私有变量_B Chr(13) 模块级私有变量_C
End Sub
(5)执行过程“One”对变量赋值,然后执行过程“Two”获取变量的值,可以得到 REF _Ref341433308 \h 图 5.5所示结果:
图1 同模块中获取变量的值
从图中结果可以判断:在模块顶部使用Public、Private和Dim三种方式声明的变量都可在模块中的任何过程中调用,它们都属于模块级的变量。
(6)单击【插入】\【模块】,从而创建“模块2”;
(7)在模块中录入以下代码,用于再次调用变量的值:
Sub Three() 放置位置:模块中
MsgBox 模块级公有变量_A Chr(13) 模块级私有变量_B Chr(13) 模块级私有变量_C
End Sub
(8)执行过程“Three”再次调用变量的值,将得到 REF _Ref341433968 \h 图 5.6所示结果,表示只有Public所声明的变量可以跨模块调用。
图2 跨模块获取变量的值
接下来,我们继续测试Dim语句在声明过程级变量和模块级变量中的分别。
(9)单击【插入】\【模块】,从而插入“模块3”,
(10)在模块中录入以下代码,包括声明一个模块级变量和两个子过程的代码:
Dim 模块级变量 As String
Sub Four() 放置位置:模块中
Dim 过程级变量 As String
模块级变量 = 公有
过程级变量 = 私有
MsgBox 模块级变量 Chr(13) 过程级变量
End Sub
Sub Five()
MsgBox 模块级变量 Chr(13) 过程级变量
End Sub
(11)执行过程“Four”对变量赋值,且获取两个变量的值,获取结果如 REF _Ref341436864 \h 图 5.7所示:
(12)执行过程“Five”再次获取两个变量的值,但是只能得到 REF _Ref341437002 \h 图 5.8所示的结果。因为变量“过程级变量”只能在声明变量的过程中调用,跨过程调用时只能得到空值。
图3 获取模块级和过程级变量的值 图4 仅成功获取模块级变量的值
变量的生命周期
变量的生存周期指对变量赋值后,变量的值在什么时候消失。
让变量的值消失包含人工释放变量和自动释放两种方式,而通常所讲的变量的生命周期是指声明变量后到它自动释放值的时间范围。
变量的生命周期与变量的作用域相关,作用域越大,其生命周期越长。
过程级的变量生命周期最短,当执行完过程后变量的值就自动消失
文档评论(0)