3.2 变量和常量
Visual Basic中进行计算时,需要临时存储数据,这时就需要将这些临时数据存储在变量中。变量帮助用户将信息暂时存储在计算机的内存里。一旦定义了变量,该变量表示的将是一个内存位置,直到释放该变量。
3.2.1 变量的命名规则
为了区别变量,可以给变量命名,命名时需遵守一定的规则。
变量名必须以字母开头。例如,不能出现像2bad这样的变量名。
只能由字母、数字和下画线组成。不能含有小数点、空格等字符。
字符个数必须在255个以内。
不能同VB的关键字(如语句名、函数名等)一样,如Print、Sub、End等。
变量名中的大写字母和小写字母相同。即不区分大小写字母。
变量名在其有效范围内必须是唯一的。
注意
在Visual Basic中,除变量命名需要遵守这些规则外,过程名、符号常量名、记录类型名、元素名等都称为名字,命名也必须遵守上述规则。
3.2.2 变量的定义和分类
在Visual Basic中可以设定在使用变量前必须进行声明。设置方法是在模块的所有过程之前加上Option Explicit语句。加上后,在程序中如果有没有事先声明的变量,程序在运行到这个语句时会弹出提示信息框,如图3.1所示。用户也可以通过界面操作实现。操作过程如下:
图3.1 提示对话框
① 选择“工具”|“选项”命令将会弹出“选项”对话框,如图3.2所示。
图3.2 “选项”对话框
② 选择“要求变量声明”选项,则会在任何新建的模块中会自动加上一个Option Explicit语句,但不包括之前的模块。
变量声明的方式主要有显式声明和隐式声明。显式声明就是用说明语句(Dim、Static、Public)声明变量。隐式声明就是在程序开始时不声明变量,程序默认将变量定义为可变类型,就是按变量的值来决定变量的类型。
1.用Dim声明变量
用Dim声明的变量称为自动变量或动态变量。变量的作用范围与声明语句所在的位置有关,如果要在整个窗体中都可以使用,则声明语句应该放在窗体的声明部分。如果只在某一过程中使用,则声明语句可放在过程内部。声明格式:
Dim变量名As类型
注意
用Dim声明的变量,在其作用范围内每次调用时都会先将这些变量的值初始化。
2.用Static声明变量
用Static声明的变量称为静态变量,即程序没有停止运行前变量的值不会随过程的调用而初始化。下面简单地用一个小例子来区别两种声明方式。程序设计界面如图3.3所示。
图3.3 程序界面
代码如下:
'变量使用前必须声明 Option Explicit '命令按钮的Click事件 Private Sub Command1_Click() '声明变量部分 Dim a As Integer '使用Dim声明的变量a Static b As Integer '使用Static声明的变量b '改变变量的值 a = a + 1 '使a加1 b = b + 1 '使b加1 '在文本框中显示变量的值 Text1.Text = a '在Text1文本框中显示变量a的值 Text2.Text = b '在Text2文本框中显示变量b的值 End Sub
程序运行后,单击“调用过程”按钮5次后,程序运行图如图3.4所示。
图3.4 程序运行图
从上例中可以看到用Dim声明的变量a在每次调用过程的时候都是先进行初始化,将a的值初始化为0,然后加1,所以a的值无论单击“调用过程”按钮多少次都不会改变。而Static声明的变量b因为是静态变量,所以b的值随单击按钮的次数而增加。
3.用Public声明变量
用Public声明的变量称为全局变量。但如在窗体中或过程中使用Public声明变量,则跟用Dim声明变量没有区别。
3.2.3 变量的作用范围
根据变量的作用范围,可以把变量分为局部变量、模块变量和全局变量三大类。
1.局部变量
局部变量声明在某一过程中,其作用域就是该过程,本模块中的其他过程不能访问该变量,本工程中的其他模块也不能访问。局部变量的声明常用Dim或Static来声明。局部变量可以存放任何类型的数据,包括数值、字符串、日期和时间。在局部变量中随着所赋值的不同,变量的类型也随着不断变化。
在同一模块的不同过程中可以声明相同的变量名,这些变量之间没有任何关系。如果需要,可以通过过程名.变量名的形式分别引用不同过程中相同名字的变量。
2.模块变量
模块级变量,也叫做窗体级变量,对该模块的所有过程都可用,但对其他模块的过程不可用。在使用模块变量之前必须对其进行声明,其具体过程包括:
按F7键打开代码窗口。
在“对象”列表框中选择“通用”。
在“过程”列表框中选择“声明”。
在声明部分用Dim或Private来声明变量。
注意
使用Private或Dim来声明变量并没有什么明显的区别,一般使用Private更容易跟Public区别开来,使程序代码更容易理解。
3.全局变量
全局变量也称为全程变量,其作用域最大。从程序开始时存在至程序结束,不过全局变量的改变也许会导致程序出错,这样就不得不读遍程序来寻找在什么地方改变了全局变量。全局变量使用Public或Global语句进行声明,只能在标准模块中声明,而不能在过程或窗体模块中声明。
注意
一个窗体中可以含有若干个过程,包括事件过程和通用过程。当同一窗体内的不同过程使用相同的变量时,必须定义为窗体级变量。标准模块是只含有代码的应用程序文件。为了建立一个新的模块,选择“工具”|“添加模块”命令。
3.2.4 常量
在计算机的内存中存储信息除了使用变量外,还可以使用常量。用户一旦定义了常量,在以后的程序中就不能再用赋值语句来修改其值,否则,在程序运行时,会产生错误。
常量是有意义的名字,用来取代程序执行期间保持不变的数值或字符串。定义常量可以改进代码的可读性和可维护性。常量主要分为文字常量和符号常量。文字常量又分为字符串常量和数值常量。
字符串常量由字符组成,如"Welcome Visual Basic 6.0"等。
数值常量包括整型数、长整型数、货币型数和浮点数四种表达方式。
文字常量的类型和值由其本身的表示形式来决定。但Visual Basic在判断常量的数据类型时,有时存在多义性。如1.34可能是单精度类型,也可能是双精度类型或货币类型。在默认情况下,Visual Basic将选择需要内存容量最小的表示方法来处理,因此1.34在默认状态下会被作为单精度数来处理。
当然,为了显式地指明常数的类型,可以在常数后面加上类型说明符,具体设置可参考表3-1。
表3-1 类型说明符
在程序设计中,经常会遇到一些多次出现或难于记忆的数值或字符串。这时,可以定义符号常量,用来代替这些数值或字符串,其语法格式如下:
[Public/Private] Const常量名 [As类型]=表达式
Public/Private表示的是常量声明的范围。
常量名是有效的符号名(其命名规则与变量的命名规则相同)。
表达式由数值常量或字符串常量及运算符组成。但在表达式中不能使用函数调用。
与变量声明相同,常量声明也有范围,其使用规则主要包括:
创建仅存在于过程中的常量,在这个过程内部使用声明语句声明常量。
创建对模块中所有过程都有效但对模块之外的任何代码都无效的常量,在模块的声明段中使用声明语句声明常量。
创建在整个应用程序中有效的常量,在标准模块的声明段中使用声明语句声明常量,并在Const前面放置Public关键字。
注意
在窗体模块或类模块中不能声明Public常量。