您可以通过使用特殊命令声明变量来创建变量,也可以直接在语句中使用该变量(无需声明)。当您声明一个变量时,实际上是让 VB 知道该变量的名称和数据类型,这称为“强制显式变量声明”。
如果您在使用变量之前没有告诉 VB 任何有关该变量的信息,那么您就是在隐含地告诉 VBA 您要创建该变量。没有显式声明的变量自动赋值为Variant数据类型(见表3-1)。虽然不声明变量很方便(可以随意创建变量,也不需要知道预先分配值的数据类型)分配给这个变量),但是,它可能会导致很多问题。
提示:强制显式变量声明的好处
1、强制显式声明变量会加速过程的执行。因为 VB 知道数据类型,所以它只占用实际存储数据所需的内存。
居住
„2、强制显式声明变量使您的代码更具可读性和可理解性,因为所有变量都在过程中首先列出
„
3、强制显式声明变量有助于防止由于变量名拼写错误而导致的错误。VB 根据变量声明中的拼写自动更正变量名。
提示:隐式声明变量的缺点
„
1、如果变量名拼错,VB 会显示运行时错误,或者创建一个新变量。您肯定会浪费大量时间进行故障排除,但是,如果在过程之前声明变量,这些很容易避免
2、因为VB不知道你要保存的变量的数据类型,所以会把它赋给Variant数据类型。这会导致您的过程运行得更慢,因为 VB 每次处理变量时都必须检查数据类型。因为 Variant 可以存储任何数据类型,VB 不得不使用更多的内存来存储你的数据
如何声明变量
您可以使用代表“维度”的关键字 Dim 来声明变量。关键字 Dim 后跟变量名,然后是数据类型。假设您希望流程显示员工的年龄。在计算年龄之前,您必须向流程提供员工的生日。您可以通过声明一个名为 DateOfBirth 的变量来做到这一点:
将 DateOfBirth 作为日期变暗
请注意变量没有在开始声明,关键字 Dim 后跟变量名称 (DateOfBirth)。如果您不喜欢该名称,您可以随意将其更改为其他名称,只要您想要的名称不是 VBA 关键字之一即可。下表 3-1 中的关键字 As 和其中一种数据类型指定了变量的数据类型。数据类型 Date 告诉 VB 变量 DateOfBirth 将存储日期。
要存储员工的年龄,请按如下方式声明变量 Age:
将年龄暗淡为整数
变量 Age 将存储从今天到员工生日之间的年数。因为年龄显示为一整年,所以变量 Age 被分配了 Integer 数据类型。您可能还希望您的程序跟踪员工的姓名变量没有在开始声明,因此声明另一个变量来保存员工的名字和姓氏:
将全名暗淡为字符串
由于“名称”一词已经在 VBA 占用列表中,因此在您的 VBA 程序中使用它肯定会出错。将变量命名为 FullName 并将其声明为 String 类型(因为员工姓名是文本)以保存员工姓名。
提示:隐式声明变量
未使用 Dim 语句显式声明的变量称为隐式声明的。这些变量被自动分配一个数据类型 Variant。它们可以保存数字、字符串和其他类型的信息。您可以通过简单地将变量分配给 VBA 程序中任何位置的变量名来创建变量。例如,您可以隐式声明变量如下:DaysLeft = 100
声明变量被认为是良好的编程习惯,因为它提高了程序的可读性并有助于避免某些类型的错误。现在您知道如何声明变量了,让我们看一下使用它的程序:
子 AgeCalc( )
'变量声明
将全名暗淡为字符串
将 DateOfBirth 作为日期变暗
将年龄暗淡为整数
'给变量赋值
全名 = “约翰·史密斯”
出生日期 = #01/03/1967#
'计算年龄
年龄 = 年(现在())-年(出生日期)
'将结果打印到立即窗口
Debug.Print FullName & " 是 " & Age & " 岁。"
结束子
(Debug是一个很好的工具,它允许对象在运行时在即时窗口中显示结果)
变量在程序的开头声明,并且从那里,它们是可用的。在上述过程中,每个变量都在单独的行上声明。如果需要,还可以在一行中声明多个变量,用逗号分隔每个变量,例如:
Dim FullName 作为字符串,DateOfBirth 作为日期,年龄作为整数
请注意,关键字 Dim 仅在变量声明行的开头出现一次。
VB在执行变量声明语句时,会创建名称准确的变量并占用内存空间来存储它们的值,然后将显式的值赋给这些变量。如何给变量赋值?变量名后跟等号,等号右侧是您希望存储在变量中的数据。您在此处输入的数据必须是变量声明的数据类型。文本数据应该用引号括起来,而日期应该用井号 # 括起来。VB 使用 DateOfBirth 提供的数据计算员工的年龄,并将计算结果存储在变量 Age 中。员工的姓名和年龄通过命令 Debug.Print 打印到即时窗口。程序运行完毕后,
让我们看看当您声明错误的数据类型时会发生什么。以下过程计算工作表中的单元格总数,并使用对话框向用户显示结果。
子 HowManyCells( )
将 NumOfCells 调暗为整数
NumOfCells = Cells.Count
MsgBox "工作表有 " & NumOfCells & " 个单元格。"
结束子
错误的数据类型会导致错误。在上述过程中,当 VB 尝试将 Cells.Count 语句的结果分配给变量 NumOfCells 时,它会失败并且 Excel 会显示消息“运行时错误 6 - 溢出”。出现此错误的原因是变量的数据类型无效,并且工作表中的单元格总数不在整数数据范围内。要更正此问题,您应该选择可以包含大量数据的数据类型。但是,要快速解决上述程序遇到的问题,可以简单地删除变量类型 AsInteger。当您重新运行该过程时,VB 会将您的变量分配为 Variant,尽管 Variant 比其他变量类型使用更多内存并减慢程序速度(因为 VB 必须做额外的工作来检查变量类型),但是,如果这是在一个简短的节目中,
提示:什么是变量类型?
您可以通过右键单击变量名称并从快捷菜单中选择“快速信息”来快速找出程序中使用的变量类型。
技能:串联
您可以将两个或多个字符串组合成一个新字符串。此操作称为连接。您已经在 AgeCalc 和 HowManyCellss 过程中看到了串联示例。连接由 & 号表示。
例如,“Hisnameis”&FirstName
将产生以下字符串:他的名字是约翰,或者他的名字是迈克尔。人名取决于变量 FirstName 的内容。请注意,is 和结束引号之间有一个空格。字符串的连接也可以使用加号 (+) 表示,但是,许多程序员更喜欢将加号限制为数字运算以消除混淆。