大家好,在本节就主要介绍变量和常量,主要掌握声明变量和变量赋值,变量的作用域和存活期需要理解。
一、变量和常量的命名
首先介绍下变量和常量命名,在VBA中可以使用名称来表示内存的位置,这个名称就是标识符,可以理解为变量和常量的名字。
1、第一个字符必须使用英文字母或中文字符(中文版EXCEL支持中文字符)
2、名称长度不超过255个字符
3、名称不能与VBA本身的Function过程、语句、即方法的名称相同,避免冲突。
4、不能在同一范围的相同层级中使用重复的名称。
二、变 量
下面介绍本节的的主要内容,变量的相关内容。
1、变量的概念
变量是用于保存程序运行过程中的临时值,和常量不同的是,在程序运行过程中变量保存的值是可以被改变的。
2、声明变量
在使用变量时,需要告诉VBA程序变量的名称和数据类型,即声明变量。通常用Dim语句来声明动态变量(还有一种不常用的Static语句来声明静态变量,后面会介绍。)
Dim语句格式如下:Dim 变量名 [ AS 数据类型 ]
声明变量通常都是在程序开始处,可以再同一行声明多个变量,用英文逗号间隔即可。举几个例子:
声明i为整型变量
Dim i As Integer
声明j为字符串,k为整型变量
Dim j As String, k As Integer
声明x和y为整型变量
Dim x, y As Integer
格式中 [AS 数据类型] 是可以省略的,即声明变量时不指定变量的类型。系统会自动将其分配为Variant变量(即变体型),这叫隐式声明。
但在编写代码时不推荐使用隐式声明变量,1、隐式声明变量后,之后变量名如果用错,VBA不会有提示。2、变体型变量占用内存多,会拖累程序运行速度。
所以通常在模块中添加Option Explict语句,要求该模块中所有变量必须先强制声明再使用。(也可以系统中直接设置默认添加这个语句,在VBE的“工具-选项”中,勾选“要求变量声明”再插入新模块时,就会默认有Option Explict语句)
3、变量赋值
为变量赋值就需要用到赋值语句,赋值语句的作用就是对表达式进行运算,并把运算结果赋值给变量或者属性。
表达式为如下(其中let经常都省略):[ let ] 变量或属性的名称=常量值或者表达式
前面用for循环举例时就用过赋值语句,下么我再举例说明下
声明的了i是字符串变量后,赋值一个字符串,最后用msgbox函数将变量的内容输出。
这里有个例需要说明,除了let语句外,在后期遇到将对象类型赋值给变量的情况时,需要用set语句来赋值,后期遇到时候会再讲解。
4、变量的作用域
作用域就是变量使用范围,VBA中有三种级别的作用域,即过程级变量、模块级变量和工程级变量。
通常使用的是过程级变量,也称为局部变量,就是再Sub和End Sub之间编写代码时声明的变量。在过程结束时,占用的内存空间就会释放,有利于节省计算机内存。在不同的过程中可以使用相同名称的过程级变量。
模块级变量时在模块的第一个过程之前使用Dim或者private声明的变量,该模块的所有过程都可以使用这个变量。
工程级的变量时在模块声明部分用puplic来声明,即Public 变量名 As 变量类型。可以在窗体、模块和类模块中都使用工程级变量。
(对于不同级的变量使用的原则,尽量使用过程级变量,如果不同过程之间有共享值时,才使用模块变量,要控制工程级变量的使用数量。)
5、变量的存活期
变量的存活期就是指变量在内存中保留的时间。那么当程序开始运行时,模块级和工程级的变量就会出现在内存中,而过程级变量时一个SUB过程开始后才储存到内存中,退出SUB过程后,变量占用的内存也会释放。
而当程序退出时,工程级变量、模块级变量和过程级变量占用的变量占用的内存都会释放。
但是如果将变量用static语句声明为静态变量,那么在过程退出时,静态变量仍保存在内存中。过程再运行一遍时,动态变量重置,而静态变量还是上一次过程运行后的结果。
静态变量声明staitc与dim语句的声明格式一样。下面我举例来说明动态变量和静态变量的区别。用Debug.print将运行结果在立即窗口中显示。
多次运行这个过程之后,运行的结果在立即窗口中显示,变量默认值为0,第一次运行过程,a和b结果都为1。第一次过程结束后,动态变量a重新变成默认值0,而静态变量b仍为1,第二次运行过程,动态变量a结果1,静态变量结果为2。结束后动态变量由会变成默认值0,而B仍为2,依次类推。只有当程序退出时候静态变量才会重置。
其实模块级变量和工程级变量的结果和静态变量时一样的,只有当程序退出时占用的内存才会释放。
三、常 量
最后简单说一下常量,在程序运行过程中值不会发生变化,常量可以在程序中直接书写的量。
如果一个常数需要反复用到,比如圆周率3.14,就可以为一个常量命名,定义格式如下:
Const 符号常数名=符号常数或表达式
本节需要掌握声明变量和变量赋值,对于变量的作用域和存活期需要理解,有利于帮助理解程序的运行,文字较多,但内容相对基础,祝大家学习愉快。
领取专属 10元无门槛券
私享最新 技术干货