各位朋友,你们好,今天和你们聊点VBA基础知识:VBA变量。 注: 此文字数约3500字,主要是讲解VBA变量知识,通过一些动图展示变量上的效果; 如果你是初学者,建议先收藏此文,看看最后给初学者的建议那一部分; 如果你是有一定的基础,想详细了解VBA的变量,提升代码运行效率,可以详细看看。 目录如下: 一、变量的概念 二、变量的命名 三、变量的申明 四、变量的类型 五、变量的作用域 六、变量的赋值 七、变量的存活期 八、正确申明变量类型对运行时间的影响 九、给初学者的建议 一、变量的概念变量是用于保存程序运行过程中的临时值。和常量不同的是,变量是一个指定的内存位置,用于保存代码执行过程中可以更改的值。 变量有两种:动态变量和静态变量 静态变量和动态变量的区别:
我们用动态图片来展示动态变量和静态变量: 动态变量和静态变量 二、变量的命名在VBA中,可以使用名称来表示内存的位置,这个名称就是标识符,可以理解为变量的名字。 变量命名的注意事项:
三、变量的申明在使用变量时,需要告诉VBA程序,变量的名称和数据类型,即声明变量。 通常用Dim语句来声明动态变量,用Static语句来声明静态变量。 声明数据类型后,可以在计算机内建立一个指定的存储位置,这样在运行代码时程序就会很快,内存利用效率很高,否则,计算机还要耗用很大的内存来判断其数值类型,运行会比较慢。 1、申明变量的写法 声明变量通常都是在程序开始处,可以在同一行声明多个变量,用英文逗号间隔即可。写法如下:
2、强制申明变量 要强制申明变量,直接在输入代码时最顶头输入【Option Explicit】,就可以,我们看下图的效果:
扩展:如果不会写【Option Explicit】,是否有快捷方法实现强制申明变量呢?当然有,请看下面动图 VBE编辑器菜单的工具→选项→编辑器→勾选要求变量申明。确定后,每次插入模块,都会在模块前面增加【Option Explicit】 四、变量的类型变量类型 VBA中的变量类型及相关参数,详见上表,我们在申明变量时,要选择合适的变量类型。 比如变量的值为整数,就把变量申明为Integer型; 如果变量的值是大于32767的整数,就要把变量申明为Long型; 如果变量是时间,就要把变量申明为Date型(在工作表中,时间是数值的一种;但是在VBA中,要根据情况明确;申明数值时,还要根据数值的形式、范围选择合适的数值类型) 注意:
五、变量的作用域作用域就是变量使用范围,VBA中有三种级别的作用域:过程级变量、模块级变量和全局级级变量。 1、过程级变量:过程级变量只在变量所在的过程中有效。 Sub Test() Dim a As Integer Debug.Print a + 1End Sub 如上面这个Test过程,这里申明的变量a,就只能用于此过程中。 2、模块级变量:在同一个模块内通用的变量。 与过程级变量声明的不同方式在于,写过程前先声明变量,模块级代码的申明方式如下:
演示效果如下:
3、全局级变量:在该工程内通用的变量。 全局变量与过程级变量声明的方式相同,都是写过程前先声明变量,全局变量的申明方式如下: Public 变量 As 变量类型 演示效果如下:
注意: ① 对于不同级的变量使用的原则,尽量使用过程级变量; ② 如果不同过程之间有共享值时,才使用全局级变量; ③ 要控制全局级变量的使用数量。 六、变量的赋值1、给文本、数值、日期等数据类型变量赋值 语句为: Let 变量名称 = 变量值(这里的Let可以省略,即:变量名称=变量值) 例如:
2、给对象变量(Object型,例如单元格)赋值 语句为:Set 变量名称=对象(这里Set千万不能少。) 例如:
七、变量的存活期变量的存活期就是指变量在内存中保留的时间,这个与变量的作用域有很大的关系。 1、过程级变量: 出现:当SUB过程开始执行时,过程级代码才储存到内存中; 结束:SUB过程执行完成时,变量占用的内存就会立即释放。 2、模块级变量: 出现:当程序开始运行时,模块级代码就储存到内存中; 结束:当关闭工作薄时,变量占用的内存才会释放。 3、全局级变量: 出现:当程序开始运行时,全局级代码就储存到内存中; 结束:当关闭工作薄时,变量占用的内存才会释放。 4、静态变量: 出现:当程序开始运行时,全局级代码就储存到内存中; 结束:当关闭工作薄时,变量占用的内存才会释放。 八、正确申明变量类型对运行时间的影响我们直接来看一张动图
九、给初学者的建议1、学习VBA是否一定要先学习变量? ①初学者不必马上去学习定义变量的各种知识,直接写代码照样可以入门; 2、是否必须在程序开头加上Option Explicit? 在电脑286、386时代,在DOS程序代码时代,在内存仅16M,32M时代,你必须定义好每一个变量的数据类型,以便最高效地进行内存使用。即,一个口袋里只有10元钱的人,要生活一周,于是你必须精打细算好每一分钱,否则就会饿死。 Option Explicit 的作用,就在于:如果你的程序没有做到精确定义每一个变量的数据类型,编译程序就会拒绝执行,它认为你太奢侈了,不懂得节约使用每一分钱。 而现在的电脑硬件环境,已经是过去的几千倍了。每一个人口袋里都有几百万的钱,还有必要去考虑一分钱、一元钱的用法么? 3、是否需要dim 所有变量? 好处:不同的数据类型,占用大小不同的字节,因此计算时对内存的占用和运算效率有所不同。因此,定义变量数据类型以后,可能的好处是少占用一些内存以及大量重复运算是提高计算速度。 比如:如果你不了解Integer的范围,在超出变量范围的情况下使用就会提示出错。比如“溢出“ 原始数据 运行结果 4、动态数组是否必须定义? Dim arr、Dim txt、Dim Num全部无意义,因为: Dim arr 等价于 Dim arr As Variant 5、学习VBA,完全可以先实战后深入,不必花费太多时间再如何声明好变量类型上,能事半功倍。抛开一些没必要的东西先让程序跑起来的确更重要。 我是上班下班,因为爱好办公软件、喜欢分享。所以来到这里将我的学习心得和踩过的一些坑,和大家聊聊,希望大家学习我成功的经验,避开我踩过的坑。我和你们一起进步。 好了,今天就聊到这里,感谢各位朋友的关注和支持。
|
|