VBA中级班课时1小结

终于开始盼望已久的VBA中级班!很荣幸地成为中级班的第一批学员,现在就让我们开始VBA新的旅程吧!

1 变量的命名规则

1.1 变量

有些数据是在程序执行中会发生变化的,为此我们分配一个内存中的位置,来存储这些不确定的数据,这就是变量。每一变量都有变量名,在同一范围内必须是唯一的。可以指定数据类型,也可以不这么做。

1.2 变量命名规则

变量名必须以字母开头(中文版可以中文开头),由字母、数字和下划线组成(中文版中可以使用中文),不得超过255个字符(所有版本一致)。要注意的是,变量名不可以是系统的保留名称,如if、else、end等。

  • VBA中变量名不区分大小写

2 声明变量

声明变量是确定变量名并为变量指定数据类型。按其定义方式可分为显式声明和隐式声明。

2.1 显式声明

即先声明变量类型,再引用变量,语法为:

         Public | Static | Private | Dim <变量名> [as 数据类型]

    变量名:用来引用变量

数据类型:确定变量存储信息的类型和占用内存大小

  • [as数据类型]可以省略,当省略时,VBA自动为变量指定为变体型数据类型(Variant)。

2.1.1 类型声明字符

在VBA中可以使用一些字符来代表数据类型,简化声明变量,这就是类型声明字符,不是所有数据类型都有类型声明字符,下表中给出了所有的类型声明字符:

数据类型

类型声明字符

字符串型(String)

$

整型(Integer)

%

长整型(Long)

&

单精度浮点型(Single)

!

双精度浮点型(Double)

#

货币型(Currency)

@

举例:

Dim iRow&    '声明长整型变量iRow

2.1.2 同时声明多个变量

在声明变量时,如果有多个变量,我们可以用逗号来分隔不同变量:

Dim <变量名1> [as 数据类型], <变量名2> [as 数据类型],………………

  • 每个变量都要指定数据类型,省略数据类型相当于指定为变体型。

举例: Dim i, j as long    '表示i是Variant型,而j是long型

2.2 隐式声明

即在过程引用变量前不事先声明此变量。在这种情况下,VBA会自动为变量分配成Variant数据类型。因为Variant型范围最广、内存容量最大,所以可以存储除定长字符串型和用户自定义型外的所有数据类型。

  • Variant型因其占用内存较大,会拖累程序的运行速度,所以我们应尽量地使用显式声明,为变量指定合适的数据类型,而不要过多的使用Variant型。
  • 注意:只有在过程中引用的局部变量才可以使用隐式声明,公共模块级别、私有模块级别和静态变量没有隐式声明方式。具体内容将在后面的变量作用范围中讲到。

2.3 强制变量声明

两种方法可以强制要求必须显式声明变量

1)在一个模块的第一行写入Option Explicit语句。

2)VBE窗口"工具"选项"要求变量声明

  • 当设置了"要求变量声明"后,VBA会在新模块(包括工作表模块、窗体模块、标准模块和类模块)自动生成Option Explicit语句,却不会在已存在的模块中自动生成
  • Option Explicit语句只在它所在的模块中起作用

3 变量的作用域和生存周期

3.1 变量的作用域

变量的作用域也是变量的范围,在声明变量的同时也定义了变量的作用域。

级别

关键字

声明语句位置

变量作用范围

过程级别变量

(局部变量)

Dim

在过程内声明

只在此过程内才能访问和改变该变量

Static

在过程内声明静态变量

私有模块级别变量

(模块级变量)

Private Dim

在模块顶部声明区内声明

在此模块内的所有过程内都可访问和改变该变量

公共模块级别变量

(全局变量)

Public

在模块顶部声明区内声明

整个工程任何模块中的任何过程都可访问和改变该变量

  • 在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易的读取和解释代码。

3.2 静态变量

当使用 Static 语句取代 Dim 语句时,所声明的变量称为静态变量。静态变量只能是局部变量,只能在过程内声明。

3.3 变量的生存期

变量除了有范围外,还有生存周期,它的生存周期与它的范围一致,变量值将在范围消失后失去。

Dim 语句声明的局部变量,变量值在过程结束后释放内存,在再次执行此过程前,它将重新被初始化;静态变量在过程结束后,只要整个程序还在运行,都能保留它的值而不被重新初始化。而当所有的代码都运行完成后,静态变量才会失去它的范围和生存期。

模块级变量与公共级变量的生存期与静态变量生存期相同,只有当整个程序结束后才会失去生存期。

3.4 变量的引用

1)不同模块中的公共模块级别变量同名,在过程中调用时,使用

模块名.变量名 方式引用。

2)同模块中公共模块级别变量与过程级别变量同名,在过程中调用公共模块级别变量时使用 模块名.变量名 方式引用;而调用过程级变量则直接调用变量名。

3) 其它模块引用窗体模块、工作表模块和工作簿模块中的公共级别变量时,也使用 模块名.变量名 方式引用

  • 小技巧:查看变量或过程

当我们想要查看过程中引用的变量或其它过程,是引用哪个模块中的变量或过程时,可以选中此变量或过程,点击右键,选择"定义",将自动跳到此变量或过程的定义处,这样很方便快捷。再点击右键选择"最后位置"将返回上次光标所在的地方。

4 小结

其实变量很好理解,把它想象成一个容器,声明变量就是确定容器形状和容量大小,变量名就是给这个容器贴个专用的名字,数据类型就是确定这个容器是装液体还是固体或气体,变量的值就是里面放入的东西。所以切记变量就是在内存中占用的存储位置。

本节课的重点是变量的作用域和变量的生存周期。作用域决定了生存期长短。变量的作用域和生存期决定程序对变量值的引用。

Excel Home技术论坛

Excel home免费在线培训中心

原文地址:https://www.cnblogs.com/zhangchenliang/p/2758673.html