【VBA笔记】VBA中存储数据的容器:变量和常量

一、VBA中存储数据的容器—变量

VBA中的变量就是给数据预留的内存空间变量通常用来存储在程序运行过程中需要临时保存的数据或对象。

1、声明变量,就是指定变量的名称及可存储的数据类型

Dim txt As String	'声明一个String类型的变量,名称为txt

此外还可以用Static、Public、Private语句来声明变量,它们定义不同的作用域。变量的作用域,决定可以在哪个模块或过程中使用该变量。按作用域分,VBA中的变量可以分为本地变量模块级变量公共变量

(1)定义本地变量

如果在一个过程中使用Dim或Static语句声明变量,声明的变量即为本地变量。如果一各变量被声明为本地变量那该变量的作用域为本过程。只有定义变量语句所在的过程才可以使用它。比如以下代码运行的时候就会提示“变量未被定义”。
VBA变量未定义

(2)定义模块级变量

如果想让同一模块中的所有过程都能使用定义的变量,可以在模块的第一个过程之前使用Dim或Private语句定义变量,这样该模块中所有的过程都可以使用定义的变量,上图中代码稍微变换即可正常运行:
VBA模块级变量

(3)定义公共变量

声明为模块级的变量只能被同一个模块中的过程使用,如果想让不同模块中的过程都能使用声明的变量,应将该变量定义为公共变量。如果要将变量声明为公有变量,应在模块的第一个过程之前用Public语句声明它。

如果一个变量被定义为公共变量,那在任意模块的任意过程中都可以使用它,公共变量必须在模块中声明,在工作表、窗体等其他对象中,即使使用了Public关键字声明变量,该变量也只能被声明为模块级变量。

2、给变量赋值,就是把数据存储到变量中

(1)给数据类型的变量赋值
如果是要将文本(字符串)、数值、日期、时间、逻辑值等数据存储到对应类型的变量中,应该使用Let关键字,例如,要将数值3000存储进变量Int中,代码应为:

Dim Int As Integer	'定义变量
Let Int = 3000		'给变量赋值

Dim Int As Integer	'定义变量
Int = 3000		'一般情况下都是省略关键字Let来给数据类型的变量赋值

(2)给对象类型的变量赋值
变量不仅可以存储文本、数值、日期等数据,还能用于存储工作簿、工作表、单元格等对象,用于存储对象的变量(Object型),在给对象类变量赋值时Set关键字万万不能少,例如要将活动工作表赋给一个变量,代码为:

Dim sht As Worksheet	'定义一个工作表对象sht
Set sht = ActiveSheet	'将活动工作表赋给变量sht

3、让变量中存储的数据参与程序计算
声明变量,并给变量赋值后,当要使用这个数据时,可以直接使用变量名称代替存储在其中的数据。

例如,在程序中使用变量存储数据:

Sub 数据变量()
    Dim Int			'定义一个Integer类型的变量
    Int = 3000			'将3000存储到变量Int中
    Range("A1").Value = Int	'将Int中存储的数据写入活动工作表A1单元格中
End Sub

或者,在程序中使用变量存储对象:

Sub 对象变量()
    Dim sht As Worksheet		'定义一个工作表对象sht
    Set sht = Activesheet		'将活动工作表赋给变量sht
    sht.Range("A1").Value = "hello"	'在变量sht存储的工作表的A1单元格中输入内容
End Sub

【注意】代码中的文本内容应写在英文半角双引号间,也只有写在英文半角双引号间的内容才会被VBA识别为文本。

4、关于声明变量的其他事项
(1)可以用一个语句同时声明多个变量

Dim sht As Worksheet,Int As Integer

(2)对于Integer(%)、Long(&)、Single(!)、Double(#)、Currency(@)、String($)这几种类型的变量,在声明时可以借助变量类型声明符来定义其类型,例如:

Dim Str$	'Str$表示要声明的变量是一个String类型的变量,变量名称为Str

二、VBA中存储数据的容器—常量

变量可以更改存储在其中的数据,而常量不可以,这就是常量和变量最主要的区别。常量通常用来存储一些固定不变的数据,如利率、税率等。

1、声明常量时应同时定义常量的名称、可存储的数据类型及存储在其中的数据,例如:

Const p As Single = 3.14	'定义一个Single类型的常量,名称为p,常量存储的数据为3.14

2、常量也有不同的作用域

同定义变量一样,在过程内部使用Const语句声明的常量为本地常量,只可以在声明常量的过程中使用;如果在模块的第一个过程之前使用Const语句声明常量,该常量则被声明为模块级常量,该模块中的所有过程都可以使用它;如果想让声明的常量在所有模块中都能使用,应在模块的第一个过程之前使用Public语句将它声明为公共常量。