Variables变量
本章教您如何在Excel VBA中声明、初始化和显示变量。让Excel VBA知道您正在使用一个变量称为声明一个变量。初始化仅仅意味着给变量分配一个开始(初始)值。
在工作表上放置一个命令按钮并在下面添加代码行。要执行代码行,请单击工作表上的命令按钮。
整数
整数变量用于存储整数
Dim x As Integer
x = 6
Range("A1").Value = x
结果:
说明:第一个代码行声明了一个名为x的整数类型的变量。接下来,我们用值6初始化x。最后,我们将x的值写入单元格A1。
String字符串
字符串变量用于存储文本。
代码:
Dim book As String
book = "bible"
Range("A1").Value = book
结果:
说明:第一个代码行声明了一个名为String的变量。接下来,我们用“bible”文本初始化书本。始终使用撇号初始化字符串变量。最后,我们将变量本的文本写到单元格A1。
Double双倍整数类型
Double类型的变量比Integer类型的变量更精确,还可以在逗号后存储数字。
Dim x As Double
x = 5.5
MsgBox "value is " & x
注:长变量的容量更大。始终使用正确类型的变量。因此,错误更容易找到,代码运行速度也更快。
Boolean布尔型
使用布尔变量保存值True或False。
代码:
Dim continue As Boolean
continue = True
If continue = True Then MsgBox "Boolean variables are cool"
结果:
显式选项Option Explicit
强烈建议在Excel VBA代码的开头使用Option Explicit。使用Option Explicit会强制声明所有变量。
例如,在工作表上放置一个命令按钮并添加以下代码行:
代码:
Dim myVar As Integer
myVar = 10
Range("A1").Value = mVar
显然,单元格A1不包含值10。那是因为我们不小心拼错了myVar。结果,Excel VBA将未声明的空变量mVar的值放入单元格A1。
当使用Option Explicit时,上面的代码行会生成一个错误,因为我们没有声明变量mVar。
1单击“确定”。然后单击Reset(Stop)停止调试器。
2更正mVar,使其读取myVar。
单击工作表上的命令按钮时的结果:
现在您知道了为什么应该在Excel VBA代码的开头始终使用Option Explicit。它避免错误地键入现有变量的名称。
幸运的是,您可以指示Excel VBA自动添加Option Explicit。
1在Visual Basic编辑器中,单击Tools,然后单击Options。
2检查需要变量声明。
注意:Option Explicit不会自动添加到现有的Excel文件中。如果你想使用它,只有你自己输入Option Explicit。
变量的作用域Variable Scope
Excel VBA中变量的作用域决定了该变量的使用位置。在声明变量时确定其范围。有三个范围级别:过程级别、模块级别和公共模块级别。
在工作表上放置命令按钮并添加以下代码行:
1将这两个过程(过程是子过程或函数)放入一个模块中。在Visual Basic编辑器中,单击“插入,模块”。添加以下代码行
2 单击工作表上的命令按钮(调用两个sub)时的结果:
说明:变量txt具有作用域过程级别,因为它是在过程(Sub和End Sub之间)中声明的。因此,只能在sub1中使用此变量。变量txt不能在sub2中使用。
3如果希望某个变量对模块中的所有过程都可用,则表示希望该变量具有模块级作用域。您需要在General Declarations部分(模块顶部)声明变量。稍微调整代码如下:
4单击工作表上的命令按钮时的结果:
说明:变量txt现在可以在sub2中使用。模块级可与私有模块级互换使用。这是因为默认情况下,在General Declarations部分用Dim语句声明的变量的作用域是private。您还可以将变量范围设置为public。继续往下看。
5通过使用Public关键字,您的变量将可用于工作簿中所有模块中的所有过程。这称为公共模块级作用域。稍微调整代码如下:
说明:现在可以创建一个新模块,并将一个子模块sub3放入该模块中。使用与sub2相同的代码。将sub3添加到命令按钮代码中。当您单击工作表上的命令按钮时,您将看到三个消息框,显示“变量只能在该过程中使用”(请参阅可下载的Excel文件)。
变量寿命Life of Variables
有时您希望在过程结束时在Excel VBA中保留变量的值。您可以使用Static关键字来实现这一点。
1在工作表上放置命令按钮并添加以下代码行:
说明:Excel VBA会在过程结束时销毁变量。每次单击工作表上的命令按钮时,Excel VBA都会再次创建变量x,将值1添加到其中,并显示结果。
2现在用关键字Static替换关键字Dim。
结论:即使程序结束,静态变量仍保留其值。
注意:单击“重置(停止)”按钮或关闭工作簿时,静态变量将被销毁。