第2章VB语言基础在第一章中,我们介绍了简单的VB应用程序的建立和基本控件的使用,使读者大致了解到利用窗体和控件为应用程序建立了界面后就需要编写程序代码,编写代码是程序设计的关键,应用程序的核心功能都是通过编写代码实现的,通过代码对用户和系统事件做出响应以执行各种任务。本章主要介绍构成VB应用程序的基本元素,包括数据类型、常量、变量、运算符、表达式和内部函数等,这些是编写程序代码的基础。2.1数据类型数据是程序处理的对象,也是程序的必要组成部分,为了更好的处理各种各样的数据,VB定义了多种数据类型。VB不但提供了丰富的标准数据类型,还允许用户根据需要定义自己的数据类型。2.1.1标准数据类型标准数据类型是系统定义的数据类型。VB提供的标准数据类型主要有数值型、字符型、逻辑型、日期型、对象型和变体型。不同类型的数据有不同的表示方法、操作方式和取值范围。VB中各种标准数据类型所占存储空间大小与取值范围的说明如表2-1所示。表2-1VB的标准数据类型表数据类型关键字占用字节数类型符前缀范围整型Integer2%Int-32768~32767长整型Long4&Lng-2147483648~2147483647单精度型Single4!Sng-3.402823E38~-1.4011298E-45;1.401298E-45~3.402823E38双精度型Double8#Dbl±4.94D-324~±1.79D308货币型Currency8@Cur-922337203685477.5808~922337203685477.5807字节型Byte1Byt0~255字符型String与字符串长度有关$Str定长:0~65535个字符变长:0~约20亿个字符逻辑型Boolean2BlnTrue或False日期型Date8Dtm1/1/100~12/31/9999对象型Object4Obj任何对象引用变体型Variant按需分配Vnt上述有效范围之一注意:要表示某一类型的数据,可以在数据后加上一个类型符来标识。使用这种方法表示整数时,整型的类型符%可省略。例如,127、-127%均表示整型数,127&表示长整型数,3.1415!表示单精度型数,1356.74#表示双精度型数。1.数值型数据数值型数据用于表示某种数值类的数据,分为整数、浮点数、字节型数和货币型数。其中整数又分为整型(Integer)和长整型(Long);浮点数也称实数,分为单精度型(Single)和双精度型(Double)。(1)整型(Integer)和长整型(Long)整型数据和长整型数据都是指不带有小数部分的数,它们可以表示正整数、负整数和零。整型数据和长整型数据的区别在于占用的字节数不同,因此可以表示的数值范围也是不同的。整数运算速度快、精确,但表示数的范围小。(2)字节型(Byte)字节型数据可以表示无符号的整数,主要用于存储二进制数。(3)单精度型(Single)和双精度型(Double)单精度型数据和双精度型数据都可以表示带有小数部分的数,实数表示数的范围大,但运算速度慢,且有误差。单精度型数据可以精确到7位有效数字,双精度型数据可以精确到15位有效数字。单精度型数据可用指数形式(科学计数法)来表示,即写成以10为底的指数形式,例如:3.24×108表示为3.24E+8,6.87×10-12表示为6.87E-12。双精度型数据也可用指数形式(科学计数法)来表示,例如:4.17×1023表示为4.17D+23,-5.689×10-13表示为-5.689D-13。E和D作为数的指数符号只能出现在数的中间。(4)货币型(Currency)货币型数据是一种专门为处理货币设计的数据类型,用于表示定点实数或整数,最多保留小数点左边15位数字和小数点右边4位数字。所有数值型的数据都有一个有效的范围值,程序中的数据如果超出规定的范围,就会出现“溢出”。如果小于范围的下限值,系统将按“0”处理;如果大于范围的上限值,则系统只按上限值处理,并显示出错误信息。2.字符型数据字符型(String)数据是指用双引号“”括起来的一串字符,字符可以包括所有西文字符和汉字。字符型数据也称为字符串。如果字符串中有双引号,例如ABCXYZ,则用连续两个双引号表示,即:ABCXYZ。字符串中包含的字符个数称为字符串的长度。不含任何字符(长度为0)的字符串称为空字符串。例表示空字符串,而表示有一个空格的字符串。在VB中,字符串分为变长字符串和定长字符串。变长字符串的长度不固定,随着对字符串变量的赋值,字符串的长度可变。变长字符串最多可以包含231个字符。一个字符串如果没有定义成固定长度的,默认为变长字符串。定长字符串的长度保持不变,如果赋值给字符串的字符数少于字符串的长度,则用空格填满不足部分;若超过字符串的长度,超出部分字符被截去。定长字符串最多可包含65535个字符。3.逻辑型数据逻辑型数据(Boolean)只有True与False两个值,常用于表示逻辑判断的结果。当逻辑型数据转换成数值型数据时,True转换为-1,False转换为0。当数值型数据转换成逻辑型数据时,非0转换为True,0转换为False。4.日期型数据日期型(Date)数据用于保存日期和时间,通常采用两个“#”符号把表示日期和时间的值括起来。VB可以接受多种表示形式的日期和时间,只要任何字面上可被认作日期和时间的字符都是合法的。赋值时如果输入的日期或时间是非法的或不存在的,系统将提示出错。例如,以下赋值语句都是正确的:DimTestDateAsDateTestDate=#10/30/2007#TestDate=#2007-10-30#TestDate=#10/30/200710:47:29pm#5.对象型数据对象型数据(Object)可用来引用应用程序中的对象。使用Set语句指定一个被声明为Object的变量,去引用应用程序所识别的任何实际对象。例如:DimobjDbAsObjectSetobjDb=OpenDatabase(c:\Vb6\student.mdb)6.变体型数据变体型数据(Variant)是一种可变的数据类型,可以存放任何类型的数据。它为VB的数据处理增加了智能性,是所有未定义的变量的默认数据类型,它对数据的处理取决于程序上下文的需要。当指定变量为Variant变量时,不必在数据类型之间转换,VB会自动完成任何必要的转换。例如:Dima'默认为Variant类型a=20'a的值是20(包含两个字符的字符串)a=a-15'转换为数值运算,a的值是5a=B&a'转换为字符串运算,a的值是B5(包含两个字符的字符串)虽然用户不必过多关注Variant变量中数据的类型就可以对Variant变量进行操作,但要避免以下情况:(1)如果对Variant变量进行数学运算或函数运算,则Variant必须包含某个数。(2)如果正在连接两个字符串,则用“&”运算符而不用“+”运算符。如果要检测变体型数据中保存的究竟是什么类型的数据,可以使用VarType()函数,根据函数的返回值确定数据类型。2.1.2用户自定义数据类型VB不仅有丰富的标准数据类型,还提供了用户自定义数据类型,它由若干个标准数据类型数据组成,是一组不同类型变量的集合,我们将在第五章中详细介绍。2.1.3枚举类型VB中提供了枚举数据类型。枚举是指将变量的值一一列举出来,变量的值仅限于列举出来的值的范围内。当一个变量只有几种可能的取值时,可以定义为枚举类型。1.枚举类型的定义枚举类型放在窗体模块、标准模块或公用类模块中的声明部分,通过Enum语句来定义。格式如下:[Public|Private]Enum类型名称成员名[=常数表达式]成员名[=常数表达式]…EndEnum2.枚举类型的使用实例例2.1:可以用与星期日~星期六相关联的一组整型常数1~7来声明一个枚举类型Week,然后在代码中使用星期的名称而不使用其整数数值。枚举类型定义及使用如下:EnumWeekSun=7Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6EndEnumPrivateSubForm_Click()PrintWeek.SatEndSub2.2常量和变量与一般程序设计语言一样,VB中使用常量和变量来存储各种类型的数据。常量用有含义的符号来表示单纯数据,方便用户使用。在VB中提供了很多内部常量,而且还允许用户自己建立常量。变量用名字来表示其中存储的数据,用数据类型表示其中存储的数据的具体类型,限制不同的数据在内存中占据的空间的大小。还可以使用数组来表示一系列相关的变量。2.2.1变量命名规则VB中变量的命名规则如下:(1)必须以字母或汉字开头,由字母、汉字、数字或下划线组成,不能含有小数点、空格等特殊字符。例如,a*b,x$y,?xy,ab.c,12sum,_a1和score%x等都错误的变量名。(2)变量名的长度不能超过255个字符。(3)不能使用VB中的关键字(语句名、函数名等)。例如,CONST,Public,Print等均为非法变量名。(4)VB中不区分变量名的大小写。(5)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。例如:strName表示字符串变量,iCount表示整型变量,dblx表示双精度变量,sngYz表示单精度变量。2.2.2常量常量也称常数,是在程序运行过程中始终保持不变的数值或字符串。通过声明和使用常量的标识符,代替一个在程序执行时不会改变的值,能增强程序的可读性,使程序的维护变得简单。在VB中有两种形式的常量:直接常量和符号常量。1.直接常量直接常量是在程序代码中直接给出的数据。根据常量的数据类型有:数值常量、字符串常量、日期/时间常量和逻辑常量。例如:数值常量:-8,123456,0,3.141593,123.45,-100.05,7.23E+10,-5.643D+10,0.5E-24,-0.53E+8。在VB中除了十进制数外,还允许使用八进制数和十六进制数。八进制数由数字0~7组成,并以&O开头。十六进制数由数字0~9、A~F组成,并以&H开头。例如:&O123、&O345、&H6E、&HFFDC。字符串常量:A,12.3,,True,10/08/2007日期常量:#07/01/1997#,#2/11/200710:10:00AM#逻辑常量:True,False2.符号常量符号常量是指在程序中用一个符号代表常量值。符号常量又分为两种:系统内部定义常量和用户定义常量。(1)系统内部定义常量VB系统提供了应用程序和控件定义的常量,即系统内部定义的常量。这些常量可与应用程序的对象、方法和属性一起使用,在代码中可以直接使用它们。用户可以在“对象浏览器”中查看内部常量。选择“视图”菜单中的“对象浏览器”,则打开“对象浏览器”窗口。在下拉列表框中选择VB或VBA对象库,然后在“类”列表框中选择常量组,右侧的成员列表中即显示预定义的常量,窗口底端的文本区域中将显示该常量的功能。为了避免不同对象中同名常量的混淆,在引用时可使用2个小写字母前缀。例如:vb:表示VB和VBA中的常量。xl:表示Excel中的常量。db:DataAccessObject库中的常量。例如,vbMaximized、vbOkOnly就是VB中的常量。(2)用户定义常量尽管VB内部定义了大量的常量,但是有时用户需要创建自己的符号常量。用户定义常量使用Const语句来给常量分配名字、值和类型。声明常量的语法格式为:Const符号常量名[As数据类型]=表达式注意:(1)符号常量名的命名规则与变量命名规则相同,为了便于程序的阅读,习惯上,符号常量名采用大写字母表示。(2)在使用类型说明符声明常量时,常量名与类型说明符之间不要有空格。(3)表达式由数值常量、字符串常量及运算符组成,但不能使用函数调用。(4)常量一旦声明,只能引用而不能改变,即不能对符号常量赋新值。例如,以下均为正确的用户定义常量:ConstPI=3.14159265ConstCMAXAsInteger=9