您的当前位置:首页正文

VBA局部变量、全局变量、变量作用域

2023-02-08 来源:易榕旅网


VBA局部变量、全局变量、变量作用域

dadaV20190317

本课时内容简介:

变量的命名规则:什么是变量,命名变量需要遵循哪些规则; 申明变量:申明变量的方式及语法格式等

变量的作用域:VBA变量的范围和可见性的相关内容

第一部分:理解变量:

一、什么是变量?

变量是在程序或者代码运行过程中,用于临时存储数据,并且其存储的数据可以根据需要发生改变的一个命名项目;

在程序中,经常需要临时存储一些数据,但有些数据在设计时是不可预知的,比如要计算某个表达式的结果或者接收用户的一些输入信息等,此时就需要引入变量来存储这些临时数据。

同Excel工作表的单元格一样,变量可以接纳很多种的数据类型,同时在程序运行后,变量的值是可以改变的

二、变量的组成

变量由名称(变量名)和数据类型指定 变量名:用来引用变量

数据类型:确定变量所能存储信息的种类以及所占存储空间的大小;

声明变量,就是给变量一个名称,并且给变量一个数据类型; 以打酱油举例:这个容器就可以视为一个变量;变量名可以叫“瓶子”,数据类型可以指定为“液体”,并且液体的体积不能超过“瓶子”的容积也就是存储空间的大小。

三、变量的数据类型:

在VBA中,常用的几种数据类型,对应取值范围,占用空间,简写符号可参考下表:

四、变量的命名规则

在VBA中,变量名也不是能随随便便命名的哦,必须遵循以下规则:

1、名称是由字母(A~Z,a~z)或数字和下划线的任意组合(在中文版中也可以包含中文) 2、名称的第一个字符只能是字母(在中文版中也可以是中文) 3、不能使用系统保留字(比如 if,End,For,sub,Dim等)

4、变量名称最长不能超过255个字符; 但既然有255个字符那么长,那么我们在命名时,

最好尽量让名称具有明确的定义,一目了然,不用舍不得字符,定义得太短;不过需注意:变量的名称最好不要和过程名称或者已定义的窗体名称等相同,避免混淆;同时;VBA中变量名不区分大小写;

第二部分:声明变量

前面我们讲了,声明变量,就是给变量一个名称并且给变量一个数据类型。 在VBA中,有两种方法声明变量1、显示声明,2:隐式声明。下面分别介绍:

一、显示声明;

显示声明,顾名思义:先声明,再使用;即在使用一个变量之前,先通过声明语句声明该变量;VBA中通常试用Dim语句 Dim <变量名>进行变量声明。其中 as 语句可以省略,但省略后,此时的变量将会自动声明为变体型。

比如:要声明字符串变量 username: Dim UserName as String 要声明整型变量icount: Dim icount as integer

声明变体型变量Arr: Dim Arr; 或者 Dim Arr as Variant

在声明变量时,除了试用as 来申明外,还可以试用类型声明符,即使用一个特殊的符号附件在变量名之后,代表某种数据类型;以下为各种类型的数据类型简写如下: 数据类型 字符串型(String) 整型(Integer) 长整型(Long) 单精度浮点型(Single) 双精度浮点型(Double) 货币型(Currency) 类型声明符 $ % & ! # @ 使用时:比如要声明整型变量icount: Dim icount% 但并不是所有的数据类型都有类型申明符,变体型数据就没有类型声明符;

使用类型声明符号可以简化输入,提高输入效率。同时,也可以在一条语句中同时声明多个变量,比如:Dim username as string,Icount as integer,Arr,i%

此时,每个变量的数据类型必须单独指定,未指定数据类型的变量均会被指定为变体型变量

更可以将相同变量一起声明; 比如:Dim Echo,Apple as String; 或者Dim i,j,k asInteger

附、相关成果说明:

在Excel附件《成果展示》sheet表中,定义了四个变量,语句为 (

Dim a字符串 As String, k变体型

Dim i1整型, i2整型% )

其中“a字符串”,“ k变体型”,“ i1整型”,“ i2整型”是变量名称,为了方便理解,我使用字母+中文方式的形式进行了命名。其中的中文说明,其实就是这些变量的数据类型; 变量“a字符串”的数据类型使用了正规的as语句; 变量“k变体型”的数据类型省略了as语句,默认为变体型;

变量“i1整型”和“i2整型”使用了数据类型简写符号 %;因为这两个变量类型相同,所以放到一起进行声明;

其他声明关键字

Public:声明公共模块级别变量 Private:声明私有模块级别变量 Static:声明静态变量

他们的声明语法都是一致的,后面再详细讲述区别;

二、隐式声明

VBA并不要求变量一定要通过显示声明才能使用,也可以不声明,直接试用变量;该方式即为隐式声明 附、相关成果说明2

所有隐式声明的变量都是变体型(Variant)变量;比如 Sub eg2()

R = Range(\"A1\").Value Debug.Print R Cells(9, 6) = R End Sub

此程序中,R没有先声明,直接使用了、此时R就是变体型变量;

(即:在立即窗口中显示R值,并在F9单元格显示R值,该值等于《成果展示》sheet表中A1单元格内容)

三、需要注意点:

只有过程级别的局部变量才能使用隐式声明,在公共模块级别,私有模块级别和静态变量是没有隐式声明方式的。

如果在执行的程序中包含隐式声明方式的变量过程时,系统提示有变量未定义的错误,那么在显示错误代码的模块声明部分,一定存在以下语句: Option Explitic。 该语句要求语句所在模块中的所有变量必须使用显示声明。该语句只对此语句存在的模块起作用。在VBA中有一个要求变量声明的选项,如果勾选了该选项,那么每一个新建的模块中都会自动插入 Option Explitic语句来强制显示声明

VBE窗口中‘工具’——》“选项”中的“要求变量声明”

第三部分:变量的作用域:

变量的作用域,在VBA中被称为变量范围的可用性,指一个变量的有效范围。变量在声明后并不是在程序的任何地方都能使用,只能在作用域中才能使用。在VBA中,变量从作用域来讲,可以分为过程级别变量,私有模块级别变量以及公共模块级别变量;

1、过程级别变量(局部变量)

是指在过程中,通过Dim或者Static关键字在过程内声明,只有过程内部的代码才能访问或者修改的变量;其中使用Static声明的变量被称为静态变量;静态变量在整个程序运行期间都是存在的,而使用Dim声明或者隐式声明的局部变量只在程序执行期间存在。在过程结束之前变量就被释放了。

2、私有模块级别变量(模块级变量)

是指在模块的声明部分通过Private或者Dim关键字声明,本模块中的所有过程都可以访问或者修改的变量。而其他模块的过程不能访问或使用;使用Private和Dim命名的变量并没有什么区别,但是为了和局部变量很好的区分开来,建议尽可能使用Private来声明。

3、公共模块级别变量(全局变量)

是指在模块的声明部分通过Public关键字声明,工程中的所有过程都可以访问或者改变的变量。

一、变量引用需知

1、在其他模块中引用窗体级模块(包括用户窗体模块,工作表模块,工作簿模块)中的公共模块级别变量,需要指定模块名称,如使用userForm1.X引用用户窗体userForm1模块中的公共模块级别变量X,使用sheet1.X引用工作表sheet1模块中的公共模块级别变量X;

2、不同模块中可以使用同名的公共模块级别变量,在这种情况下引用变量时需要指定模块名称来限定所引用的变量;

3、公共模块级别变量与过程级别变量可以同名,在过程内部引用的为过程级别变量,如果需要引用公共模块级别变量时,应指定相应模块名称;

二、2个小技巧

1、在程序中选择任何一个变量,如P,右键菜单点击 定义,可以找到该变量P的声明语句。这就是查看变量定义的快捷方式~

如果在过程中调用了另一个过程的变量,就可以用这个方法来快速查看。

2、看完后,还可以使用右键菜单中的“最后位置“菜单功能项返回最后一次光标所在的

程序位置。

因篇幅问题不能全部显示,请点此查看更多更全内容