第三章  VB的程序设计基础

2.1  VB编码规则

1.  语言元素

   VB的语言基础是BASIC语言,VB程序的语言元素主要由:

  关键字(如: Dim、Print、Cls)

  函数(如:Sin()、Cos()Sqr())

  表达式(如:Abs(-23.5)+45*20/3 )

  语句(如:X=X+5 、 IF……ELSE……END IF)等组成。

2.  VB代码书写规则

 (1) 程序中不区分字母的大小写,Ab 与AB等效;

 (2) 系统对用户程序代码进行自动转换:

   1)  对于VB中的关键字,首字母被转换成大写,其余转换成小写

    2)  若关键字由多个英文单词组成,则将每个单词的首字母转换成大写

    3)  对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式

3.  语句书写规则

 (1)在同一行上可以书写多行语句,语句间用冒号()分隔

 (2)单行语句可以分多行书写,在本行后加续行符:空格和下划线  _

 (3) 一行允许多达255个字符

4.  程序的注释方式

 (1)整行注释一般以 Rem开头,也可以用撇号 '

 (2)用撇号 ' 引导的注释,既可以是整行的,也可以直接放在语句的后面,最方便;

 (3)可以利用“编辑”工具栏的“设置注释块”、“解除注释块”来将设置多行注释。

5. 保留行号和标号

  VB源程序接受行号与标号,但不是必须的(早期的BASIC语言中必须用行号)。

  标号是以字母开始以冒号结束的字符串,一般用在GOTO语句(现在很少用)中。


2.2  VB的语言基础

1.数据类型

 VB的标准数据类型


数据类型



关键字



类型符



前缀



存储空间



范围



数值数据类型



字节型



Byte


 


Byt



1 个字节



0 到 255



整型



Integer



%



Int



2 个字节



-32,768 到 32,767



长整型



Long



&



Lng



4 个字节



-2,147,483,648 到 2,147,483,647



单精度型



Single





Sng



4 个字节



负数:-3.402823E38 到 -1.401298E-45;正数:1.401298E-45 到 3.402823E38



双精度型



Double



#



Dbl



8 个字节



负数: -1.79769313486232E308

       - 4.94065645841247E-324;

正数:4.94065645841247E-324

      1.79769313486232E308



货币型



Currency



@



Cur



8 个字节



从 -922,337,203,685,477.5808

到 922,337,203,685,477.5807



逻辑型



Boolean


 


Bln



2 个字节



True 或 False



日期型



Date


 


Dtm



8 个字节



100 年1月 1日 到 9999 年 12 月 31 日



对象型



Object


 


Obj



4 个字节



 任何 Object 引用



变长字符型



String



$



Str



10 字节加字符串长度



0 到大约 20 亿



定长字符型



String



$



Str



字符串长度



1 到大约 65,400



变体数字型



Variant


 


Vnt



16 个字节



任何数字值,最大可达 Double 的范围



变体字符型



Variant


 


Vnt



22 个字节加字符串长度



与变长 String 有相同的范围


注意

  1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。

  2) 逻辑型数据只有True 和False两个值,转换成整型时,True=-1 ,False=0,将其它类型转换成逻辑型时,非0数转换为True ,0转换为False。

  3) 字符型可以包括所有的西文字符和汉字,字符必须用双引号括" "起来, 如:"abc123"

  4)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。

 如:#3/22/2002#    #2002-3-22 14:30:20#

   Dim T As Date

   T=-2.5

   Print T    ' 打印出来的结果是1899-12-28 12:00:00

 5)任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。

2. 变量与常量

 (1)变量或常量的命名规则

   1) 必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度≤255个字符;

   2) 不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim 、Sin

   3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示

   4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。

 (2)变量声明

   1)用Dim语句进行显式声明

      语句形式 Dim  变量名 [As 类型]      如: Dim  intX  As integer

          说明:·如果没有As 类型,则默认为变体类型。

        ·可在变量名后加类型符来代替As 类型  如: Dim  intX%

        ·一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用;

        ·字符串变量根据其存放的长度是否固定,定义方法不同:

       定长字符串:  Dim  strA  As  String*10  

              表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。

       不定长字符串Dim  strA  As  String      ’最多可存放2MB个字符

2) 隐式声明

  VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。

  隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用Option  Explicit 语句来强制显式声明所有变量。

(3)常量

  1)直接常量

    指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2 、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。

    八进制常数:  在数值前加&O ,如  &O123

    十六进制常数:在数值前加&H ,如&H123

  2)用户声明的符号常量

      用Const来声明:  Const  符号常量名 [As 类型] = 表达式

   如:Const  PI=3.14159              '声明了常量PI,代表3.14159,单精度型

    Const  MAX As Integer=&O144  ''声明了常量MAX,代表八进制数144,整型

    Const  COUNT#=45.67          '声明了常量COUNT,代表45.67,双精度型

  3)系统提供的常量

    系统定义的常量位于对象库中,在对象浏览器中的Visual Basic(VB)和Visual Basic for Aplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。

    如:Form1.WindowsState=vbMaximized 表示将窗口极大化。

3.    运算符

(1)     算术运算符


运算符



含义



优先级



示例



结果



^



乘方



1



Ia^2



9



-



负号



2



-iA



-3



*





3



IA* iA* iA



27



/





3



10/iA



3.33333333333333



\



整除



4



10\iA



3



Mod



取模



5



10 Mod iA



1



+





6



10+iA



13



-





7



IA-10



-7


     说明:设表中的变量iA=3, 为整型。

   算术运算符两边的操作数应该是数值型,若是数字字符或逻辑型,则自动转换为数值类型后再运算。

(2)     字符串运算符


运算符



作用



区别



示例



结果



&



将两个字符串拼接起来



 连接符两旁的操作数不管是字符型还是数值型,系统先将操作数转换成字符,然后再连接。



"123"&55

"abc"+12



"12355"

"abc12"



+



连接符两旁的操作数均为字符型;若均为数值型则进行算术加法运算;若一个为数字字符型,一个数值型,则自动将数字字符转换为数值,然后进行算术加;若一个为非数字字符型,一个数值型,则出错。



"123"+55

"abc"+12



178

出错


(3)     关系运算符


运算符



含义



示例



结果



=



等于



"ABCDE"="ABR"



False



>



大于



"ABCDE">"ABR"



False



>=



大于等于



"bc">="大小"



False



<



小于



23<3



False



<=



小于等于



"23"<="3"



True



<>



不等于



"abc"<>"ABC"



True



Like



字符串匹配



"ABCDEFG" Like "*DE*"



True



Is



对象引用比较


 

 

 注意:

  1)   如果两个操作数都是数值型,则按其大小比较

  2)    如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较

  3)    汉字字符大于西文字符

  4)   关系运算符的优先级相同

  5)   VB6.0中Like运算符与通配符的使用:

  ?——表示任何单一字符

  *——表示0个或多个字符

  #——表示任何一个数字(0 - 9)

  [字符列表]——表示字符列表中的任何单一字符

  [!字符列表]—— 表示不在字符列表中的任何单一字符

(4) 逻辑运算符


运算符



含义



优先级



说明



示例



结果



Not



取反



1



当操作数为假时,结果为真



Not  F

Not  T



 T

 F



And





2



两个操作数均为真时,结果才为真



T  And  T

F  And  F

T  And  F

F  And  T



 T

F

F

F



Or





3



两个操作数中有一个为真时,结果为真



T  Or  T

F  Or  F

T  Or  F

F  Or  T



T

F

T

T



Xor



异或



3



两个操作数不相同,结果才为真,否则为假



T  Xor  F

T  Xor  T



T

F



Eqv



等价



4



两个操作数相同时,结果才为真



T  Eqv  F

T  Eqv  T



F

T



Imp



蕴含



5



第一个操作数为真,第二个操作数为假时,结果才为假,其余都为真



T  Imp  F

T  Imp  T



F

T


 说明:

   1)若有多个条件时,And必须全部条件为真才为真;Or只要有一个条件为真就为真。

   2)如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。And运算常用于屏蔽某些位;Or运算常用于把某些位置1。

    如:12 And 7  表示对1100与0111进行And运算,得到二进制值100,结果为十进制4。

   3)对一个数连续进行两次Xor操作,可恢复原值。在动画设计中,用Xor可恢复原来的背景。

4.表达式

 (1)表达式的组成

     表达式由常量、变量、运算符、函数和圆括号按一定的规则组成,通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。

 (2表达式的书写规则

   1)乘号不能省略

   2)括号必须成对出现,均使用圆括号,可以嵌套,但必须配对。

   3)表达式从左到右在同一基准上书写,无高低、大小之分。

     例:sqr((3*x+y)-z)/(x*y)^4

 (3)不同数据类型的转换

    操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。

 (4)优先级

     同一表达式中,不同运算符的优先级是:算术运算符 > 字符运算符 > 关系运算符 > 逻辑运算符

  注意:对于存在多种运算符的表达式,可增加圆括号改变优先级或使表达式更清晰。

2.3  VB的公共函数

1.  数学函数

  VB中常用的数学函数


函数名



功能



示例



结果



Sqr(x)



求平方根



Sqr(9)



3



Log(x)



求自然对数,x>0



Log(10)



2.3



Exp(x)



求以e为底的幂值,即求ex



Exp(3)



20.086



Abs(x)



求x的绝对值



Abs(-2.5)



2.5



Hex[$](x)



求x的十六进制数,返回的是字符型值



Hex[$](28)



"1C"



Oct[$](x)



求x的八进制数,返回的是字符型值



Oct[$](10)



"12"



Sgn(x)



求x的符号, 当x>0, 返回1 ;x=0, 返回0; x<0, 返回-1



Sgn(15)



1



Rnd(x)



产生一个在(0,1)区间均匀分布的随机数,每次的值都不同;若x=0,则给出的是上一次本函数产生的随机数



Rnd(x)



0-1之间的数



Sin(x)



求x的正弦值,x的单位是弧度



Sin(0)



0



Cos(x)



求x的余弦值,x的单位是弧度



Cos(1)



0.54



Tan(x)



求x的正切值,x的单位是弧度



Tan(1)



1.56



Atn(x)



求x的反正切值,x的单位是弧度,函数返回的是弧度值



Atn(1)



0.79


2.  字符函数

 (1)字符串编码

      在Windows采用的DBCS(Double Byte Character Set)编码方案中,一个汉字在计算机内存中占2个字节,一个西文字符(ASCII码)占1个字节,但在VB中采用的是Unicode(ISO字符标准)来存储字符的,所有字符都占2个字节。为方便使用,可以用StrConv函数来对Unicode 与DBCS进行转换,可以用函数Len()函数求字符串的字符数,用 LenB()函数求字符串的字节数。

 (2)常用的字符串函数


函数名



功能



示例



结果



Len(x)



求x字符串的字符长度(个数)



Len("ab技术")



4



LenB(x)



求x字符串的字节个数



LenB("ab技术")



8



Left(x,n)



从x字符串左边取n个字符



Left("ABsYt",2)



"AB"



Right(x,n)



从x字符串右边取n个字符



Right("ABsYt",2)



"Yt"



Mid(x,n1,n2)



从x字符串左边第n1个位置开始向右取n2个字符



Mid("ABsYt",2,3)



"BsY"



Ucase(x)



将x字符串中所有小写字母改为大写



Ucase("ABsYug")



ABSYUG



Lcase(x)



将x字符串中所有大写字母改为小写



Ucase("ABsYug")



absyug



Ltrim(x)



去掉x左边的空格



Lrim("  ABC  ")



"ABC  "



Rtrim(x)



去掉x右边的空格



Trim("  ABC  ")



"  ABC"



Trim(x)



去掉x两边的空格



Trim("  ABC  ")



 "ABC"



Instr(x,"字符", M)



在x中查找给定的字符,返回该字符在x中的位置,M=1不区分大小写,省略则区分



Instr("WBAC","B")



2



String(n,"字符")



得到由n个首字符组成的一个字符串



String(3,"abcd")



"aaa"



Space (n)



得到n个空格



Space (3)



"□□□"



Replace(C,C1,C2,N1,N2)



在C字符串中从N1开始将C2替代N2次C1,如果没有N1表示从1开始



Replace("ABCASAA","A","12",2,2)



"ABC12S12A"



StrReverse (C)



将字符串反序



StrReverse ("abcd")



"dcba"


3.  日期与时间函数

  常用的日期与时间函数


函数名



含义



示例



结果



Date ()



返回系统日期



Date ()



02-3-19



Time()



返回系统时间



Time()



3:30 :00 PM



Now



返回系统时间和日期



Now



02-3-19 3:30 :00



Month(C)



返回月份代号(1-12)



Month("02,03,19")



3



Year(C)



返回年代号(1752-2078)



Year("02-03-19")



2002



Day(C)



返回日期代号(1-31)



Day("02,03,19")



19



MonthName(N)



返回月份名



MonthName(1)



一月



WeekDay()



返回星期代号(1-7),星期日为1



WeekDay("02,03,17")



1



WeekDayName(N)



根据N返回星期名称, 1为星期日



WeekDayName(4)



星期三


  增减日期函数: DateAdd(要增减日期形式,增减量,要增减的日期变量)

     例:计算期末考试日期:DateAdd("ww",15,#2002/3/19#)

  求日期之差函数: DateDiff(要间隔日期形式,日期一,日期二)

    例:计算距毕业天数: DateDiff("d", Now, #2005/6/30#)

  日期形式


日期形式



yyyy



q



m



y



d



w



ww



h



n



s



意义









一年的天数





一周的天数



星期








4. 转换函数


函数名



功能



示例



结果



Str (x)



将数值数据x转换成字符串



Str (45.2)



  "45.2"



Val(x)



将字符串x中的数字转换成数值



Val("23ab")



   23



Chr(x)



返回以x为ASCII码的字符



Chr(65)



   "A"



Asc(x)



给出字符x的ASCII码值,十进制数



Asc("a")



    97



Cint(x)



将数值型数据x的小数部分四舍五入取整



Cint(3.6)



    4



Int(x)



取小于等于x的最大整数



Int(-3.5)

Int(3.5)



-4

3



Fix(x)



将数值型数据x的小数部分舍去



Fix(-3.5)



   - 3



CBool(x)



将任何有效的数字字符串或数值转换成逻辑型



CBool(2) CBool("0")



True

False



CByte(x)



将0-255之间的数值转换成字节型



CByte(6)



6



CDate(x)



将有效的日期字符串转换成日期



CDate(#1990,2,23#)



1990-2-23



CCur(x)



将数值数据x转换成货币型



CCur(25.6)



25.6



Round(x,N)



在保留N位小数的情况下四舍五入取整



Round(2.86,1)



2.9



CStr(x)



将x转换成字符串型



CStr(12)



   "12"



CVar(x)



将数值型数据x转换成变体型



CVar("23")+"A"



   "23A"



CSng(x)



将数值数据x转换成单精度型



CSng(23.5125468)



23.51255



CDbl(x)



将数值数据x转换成双精度型



CDbl(23.5125468)



23.5125468


5.  格式输出Format函数

    Format函数用于制定字符串或数字的输出格式。

    语法x = Format (expression, fmt )

     expression是所输出的内容。fmt是指输出的格式,这是一个字符串型的变量,这一项若省略的话,那么Format函数将和Str函数的功能差不多。如:


语句



输出



Format (2, “0.00”)



2.00



Format (.7, “0%”)



 70%  



Format (1140, “$#,##0”)



$1,140


                                    fmt字符的意义


字符



意义



字符



意义



 0



 显示一数字,若此位置没有数字则补0



 . 



小数点



 #



 显示一数字,若此位置没有数字则不显示



 ,



 千位的分隔符



 %



 数字乘以100并在右边加上”%”号



- + $ ( )



 这些字出现在fmt里将原样打出


Format函数对时间进行输出时的意义


fmt



输出



fmt



输出



m/d/yy



 8/16/96



  h:mm:ss a/p



 10:41:29 p 



d-mmmm-yy



 16-August-96



  h:mm



 22:41 



d-mmmm



 16-August



  h:mm:ss



 22:41:29 



mmmm-yy



 august-96



 m/d/yy h:mm



 8/16/96 22:41 



hh:mm AM/PM



 10:41 PM


 

 

6.InputBox函数与MsgBox函数

(1)InputBox函数

  语法:x = InputBox (prompt, title, default, xpos, ypos, helpfile, context)

     其中,prompt是提示的字符串,这个参数是必须的。title是对话框的标题,是可选的。default是文本框里的缺省值,也是可选的。xpos,ypos决定输入框的位置。helpfile,context用于显示与该框相关的帮助屏幕。返回值 x 将是用户在文本框里输入的数据,x是一个字符串类型的值。如果用户按了Cancel钮,则 x 将为空字符串。

(2)MsgBox函数

    语法:Action = MsgBox (msg, type, title)


数值



符号常量



意义



0



vbOKOnly



只显示 Ok 按钮



1



 vbOKCancel



显示 Ok  Cancel 按钮



2



vbAbortRetryIgnore



显示 Abor  Retry  Ignore 按钮



3



vbYesNoCancel 



显示 Yes  No  Cancel 按钮



4



vbYesNo 



显示 Yes  No 按钮   



5



vbRetryCancel



显示 Retry Cancel 按钮



16



vbCritical 



Stop Sign对极其重要的问题提醒用户



32



 vbQuestion



Question Mark增亮没有危险的问题



48



vbExclamation



 Exclamation Mark强调警告用户必须知道的事情



64



vbInformation



Information Mark可以使乏味的信息变得有趣



0



vbDefaultButton1



第一个按钮缺省



256



vbDefaultButton2



 第二个按钮缺省



512



vbDefaultButton3



 第三个按钮缺省   


  Action的值


返回值



含义



返回值



含义



1



选择 Ok 按钮



5



选择 Ignore 按钮



 2



选择 Cancel 按钮





选择 Yes 按钮



 3



选择 Abort 按钮



7



选择 No 按钮



 4



选择 Retry 按钮