VB基本语法学习.docx
《VB基本语法学习.docx》由会员分享,可在线阅读,更多相关《VB基本语法学习.docx(19页珍藏版)》请在冰豆网上搜索。
![VB基本语法学习.docx](https://file1.bdocx.com/fileroot1/2023-1/5/4ba5a9f2-84a1-4bcd-a664-69d8b2de2903/4ba5a9f2-84a1-4bcd-a664-69d8b2de29031.gif)
VB基本语法学习
VB基本语法学习<转>
高级语言 2008-08-1812:
45 阅读639 评论0
字号:
大大 中中 小小
1常量与变量
1.1VB的数据类型
数据类型是数据的表示和存储形式。
VB定义的基本数据类型如表5-1所示。
表5-1VB的基本数据类型
数据类型
类型描述
类型说明后缀
数据范围
所占字节数
Integer
整型
%
-32768~32767
2
Long
长整型
&
-2147483648~2147483647
4
Single
单精度浮点型
!
-3.402823E38~-1.401298E-45
1.401298E-45~3.402823E38
4
Double
双精度浮点型
#
-1.79769313486232E308~-4.9406564584124E324
4.9406564584124E324~1.79769313486232E308
8
Currency
货币型
@
8
String
字符串型
$
每字符占一字节
Byte
字节型
0~255
1
Boolean
布尔数据型
-1(True)、(False)
Date
日期型
Object
对象型
4
Variant
变体
为上述任一种
Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度长整型)及Currency(货币型)均为Numeric数据类型。
其中整型是16位的整数,长整型是32位的整数。
单精度及双精度浮点型就表示实数,常被用于数量较大的数字。
Currency数据类型支持小数点右面15位,是定点数据类型,适用于货币计算。
String(字符串变量)的数据类型只存放文本,是一个字符序列,它的每一个字符用ASCII编码表示。
不包含任何字符的串称为空串。
Byte数据类型表示0到255之间的数,常用于访问二进制文件、图形和声音文件
等。
当需要把数据存放成字节,必须访问各字节时可采用Byte类型。
取值仅为True/False的类型称为Boolean(布尔)型,缺省值为False。
Date数据类型用于以特殊方式存放日期和时间。
Object变量可引用应用程序中或某些其他应用程序中的对象。
VB缺省规定,如果在生命中没有说明数据类型,则变量的数据类型为Variant(变体)。
Variant数据类型还包含三种特定值:
Empty、Null、Error。
Empty值用于确定是否已将一个值赋予所创建的变量。
赋值之前,Variant变量具有值Empty。
Null常用于数据库应用程序,表示未知或丢失为空的数据。
Error值是指已发出的过程中的错误状态。
Variant数据类型是最为灵活的数据类型,可以依据不同的需要进行各种数据类型的转换。
它实际上包含两部分信息,一部分是数据类型的信息,一部分是表示数据值的信息。
但正是由于它的灵活性,又使得它存在着一个明显的缺点,Variant数据类型比其他类型的数据占有更多的内存空间。
2数组
VB中数组的定义类似于变量定义,所不同的是数组需要指定数组中的元素个数,例如:
DimArray(9)AsInteger
数组中包含10个元素,脚标从0到9。
也可以指定脚标的起始值,例如:
DimIntegerArray(2to10)AsInteger
这个数组含有九个元素,脚标从2到10。
还可以定义多维数组:
DimThreeD(4,2to5,3to6)AsInteger
定义一个三维数组(4×4×4)。
数组
数组是一组拥有相同名称同类元素。
定义数组后,即创建了数组。
数组中单个的数据项称为数组元素,用于访问数组元素的编号称为数组索引号,最小索引号和最大索引号称为边界。
在VBA中,根据数组元素是否变化,分为固定大小的数组和动态数组,根据数组的维数又可分为一维数组和多维数组。
1、创建数组
用Dim语句来定义固定大小的数组,即声明一个数组。
如
DimmyArray(9)AsInteger
上面的代码创建一个名为myArray含有10个数组元素的一维数组。
注意,所有VBA数组的下界均从0开始,因此上面的代码所创建的数组元素从myArray(0)到myArray(9)。
在Dim语句中不指明数组元素的个数来声明动态数组,如
DimmyDynamicArray()AsInteger
使用ReDim关键字重新定义数组的大小:
ReDimmyDynamicArray(10)
也可以用ReDim关键字同时声明一个动态数组并指定该数组的元素个数:
ReDimmyDynamicArray(5)AsInteger
VBA没有限制重新定义动态数组大小的次数,但在重新定义数组大小时,原有的数组数据就会丢失。
如果需要保留原来的数据,可以使用Preserve关键字:
ReDimPreservemyDynamicArray(5)
需要注意的是,如果重新定义数组时减小了数组的大小,则会丢失被缩减了的那部分元素的数据。
当然,与声明变量一样,也可以用Public语句声明公共数组。
2、确定数组的边界
可以使用UBound函数和LBound函数分别获取数组的最大边界和最小边界。
默认情况下,VBA的数组的下界是从0开始的,可以在模块的声明部分使用OptionBase语句来改变模块中数组的起始边界。
如
OptionBase1
该语句使数组元素的索引号从1开始。
也可以在定义数组时指定数组的上界和下界,如
Dim<数组名>(<下界>to<上界>)As<数据类型>
3、多维数组
多维数组可以在每个数组元素中存储一组数据,因此,多维数组的每个数组元素都包含一个数组。
与一维数组相同,可以使用下面的两种方法创建多维数组:
(1)Dim<数组名>(<数组元素数1>,<数组元素数2>,……)As<数据类型>
(2)Dim<数组名>(<下界>to<上界>,<下界>to<上界>,……)As<数据类型>
与一维数组相似,多维数组也可以是动态的。
4、引用数组中的元素
可以使用数组名称和一个索引号来引用数组中的某个特定的元素。
变量与常量:
1)VB允许使用未定义的变量,默认是变体变量Variant。
2)在模块通用说明部份,加入OptionExplicit语句可以强迫用户进行变量定义。
3)变量定义语句及变量作用域
Dim 变量as类型'定义为局部变量,如Dimxyzasinteger
Private变量as类型'定义为私有变量,如Privatexyzasbyte
Public变量as类型'定义为公有变量,如Publicxyzassingle
Global变量as类型'定义为全局变量,如Globlalxyzasdate
Static变量as类型'定义为静态变量,如Staticxyzasdouble
一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。
4)常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,作用域也如同变量作用域。
如下定义:
ConstPi=3.1415926assingle
5,数组:
是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。
在内存中表现为一个连续的内存块,必须用Global或Dim语句来定义。
定义规则如下:
Dim数组名([lowerto]upper[,[lowerto]upper,….])astype;Lower缺省值为0。
二维数组是按行列排列,如XYZ(行,列)。
除了以上固定数组外,VBA还有一种功能强大的动态数组,定义时无大小维数声明;在程序中再利用Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。
如下例:
Dimarray1()asdouble:
Redimarray1(5):
array1(3)=250:
Redimpreservearray1(5,10)
6,注释和赋值语句
1)注释语句是用来说明程序中某些语句的功能和作用;VB中有两种方法标识为注释语句。
单引号’;如:
’定义全局变量;可以位于别的语句之尾,也可单独一行
Rem;如:
Rem定义全局变量;只能单独一行
2)赋值语句是进行对变量或对象属性赋值的语句,采用赋值号=,如X=123:
Form1.caption=”我的窗口”。
对对象的赋值采用:
setmyobject=object或myobject:
=object
7,书写规范:
1)VBA不区分标识符的字母大小写,一律认为是小写字母;
2)一行可以书写多条语句,各语句之间以冒号:
分开;
3)一条语句可以多行书写,以空格加下划线_来标识下行为续行;
4)标识符最好能简洁明了,不造成歧义。
运算符
VB具有丰富的运算符集,大体上分为三类,算术运算符、关系运算符和逻辑运算符。
5.3.1算术运算符
VB中的算术运算符有如下几种:
^幂运算-负号
*乘/除
整除Mod取模
+加-减
以下列出几个算术运算的表达式:
X=Y^2‘X等于Y的平方
X=Y^-2‘X等于Y的负二次方
X=Y*Z‘X等于Y乘以Z
X=Y/Z‘X等于Y除以Z
X=5/2‘X等于5除以2,值为2.5
X=52‘X等于5用2整除,值为2
X=5Mod2‘X等于5模2,值为1
5.3.2关系运算符
=等于>大于<小于
<>不等于<=小于等于>=大于等于
如:
X=Y
3<>2……
关系运算符与数学运算符的用法一致,只是表达方式有所不同而已。
5.3.3逻辑运算符
VB中的逻辑运算符有:
NOT非AND与
OR或XOR异或
EQU逻辑等IMP隐含
以下分别介绍这几种运算符:
NOT:
逻辑非。
对逻辑值取反,如:
3<5‘表达式值为真
NOT3<5‘取反,表达式值为假
AND:
逻辑与。
两个表达式的值均为真,则结果为真,如果有任一个表达式值为假,则结果为假。
其运算规则如表5-2。
表5-2AND运算规则表
第一操作符
第二操作符
操作结果
True
True
True
True
False
False
False
True
False
False
False
False
例如:
3<5AND4>3‘两个表达式结果均为真,则AND操作结果为真。
3<5AND4<3‘第一个表达式结果为真,第二个表达式结果为假,则AND操作结果为假。
OR:
逻辑或。
当两个表达式中至少一个为真时,结果为真。
运算规则如表5-3。
表5-3OR运算规则表
第一操作符
第二操作符
操作结果
True
True
True
True
False
True
False
True
True
False
False
False
例如:
3<5OR4<3‘第一个表达式结果为真,第二个表达式结果为假,则OR操作结果为真。
XOR:
逻辑异或。
当两个表达式值相反时,结果为真。
运算规则如表5-4。
表5-4XOR运算规则表
第一操作符
第二操作符
操作结果
True
True
False
True
False
True
False
True
True
False
False
False
例如:
5/3>1XOR1<0‘第一个表达式结果为真,第二个表达式结果为假,则XOR操作结果为真。
EQU:
逻辑等。
两个表达式的值相同时,结果为真。
运算规则如表5-5。
表5-5EQU运算规则表
第一操作符
第二操作符
操作结果
True
True
True
True
False
False
False
True
False
False
False
True
例如:
3<2EQU(3-1)<0‘第一个表达式结果为假,第二个表达式结果也为假,则EQU操作结果为真。
IMP:
比较两个表达式。
当第一个表达式为假或第二个表达式为真时操作结果为真。
运算规则如表5-6。
表5-6IMP运算规则表
第一操作符
第二操作符
操作结果
True
True
True
True
False
False
False
True
True
False
False
True
例如:
3<2IMP3>0‘第一个表达式结果为假,第二个表达式结果为真,则IMP操作结果为真。
5.4基本语句
5.4.1注释语句
在使用注释语句之前必须先了解注释的作用,注释不仅仅是对程序的解释,有时它对于程序的调试也非常有用,譬如说可以利用注释屏蔽一条语句以观察变化,发现问题和错误。
以后注释语句将是我们在编程里最经常用到的语句之一。
在VB里,注释语句有两种,一种是用“Rem”关键字,这跟DOS里的批处理文件的用法一样,还有一种是利用单引号“’”,例如:
‘DimaAsString与
RemDimaAsString的作用是一致的。
5.4.2顺序语句
顺序语句就是依顺序逐条执行的语句。
在程序中没有流程控制语句的情况下,程序中各语句将按顺序逐一执行,只有在上一条语句执行完毕后,才能执行下一条语句。
5.4.3条件语句
任何一种程序语言都离不开流程控制语句,程序中控制流程的语句有两种:
条件与循环。
掌握这两种语句是学习编程关键的一步,下面首先介绍VB中的条件语句。
5.4.3.1IF语句
在条件语句里,我们先来学习“If……Then……”语句。
语法:
If<条件>Then
<语句>
EndIf
如果希望条件不满足时执行另一语句,可以以增加一个else语句:
If<条件>Then
<语句>
else
<语句>
EndIf
如果Then后面所跟的语句只有一条,可以写成:
If<条件>Then<语句>
而不用EndIf。
还可以在Else里在嵌套If语句,如:
If<条件>Then
<语句>
ElseIf<条件>Then
<语句>
……
Else
<语句>
EndIf
判断语句
1)If…Then…Else语句
IfconditionThen[statements][Elseelsestatements]
如1:
IfA>BAndC如2:
Ifx>250Thenx=x-100
或者,可以使用块形式的语法:
IfconditionThen
[statements]
[ElseIfcondition-nThen
[elseifstatements]...
[Else
[elsestatements]]
EndIf
如1:
IfNumber<10Then
Digits=1
ElseIfNumber<100Then
Digits=2
Else
Digits=3
EndIf
2)SelectCase…Case…EndCase语句
如1:
SelectCasePid
Case“A101”
Price=200
Case“A102”
Price=300
……
CaseElse
Price=900
EndCase
3)Choose函数:
choose(index,choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,并将其返回,index必要参数,数值表达式或字段,它的运算结果是一个数值,且界于1和可选择的项目数之间。
choice必要参数,Variant表达式,包含可选择项目的其中之一。
如:
GetChoice?
=Choose(Ind,"Speedy","United","Federal")
4)Switch函数:
Switch(expr-1,value-1[,expr-2,value-2_[,expr-n,value-n]])switch函数和Choose函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为TRUE的值会被返回。
expr必要参数,要加以计算的Variant表达式。
value必要参数。
如果相关的表达式为True,则返回此部分的数值或表达式,没有一个表达式为True,Switch会返回一个Null值。
9,循环语句
1)ForNext语句以指定次数来重复执行一组语句
Forcounter=startToend[Stepstep]'step缺省值为1
[statements]
[ExitFor]
[statements]
Next[counter]
如1:
ForWords=10To1Step-1'建立10次循环
ForChars=0To9'建立10次循环
MyString=MyString&Chars'将数字添加到字符串中
NextChars'Incrementcounter
MyString=MyString&""'添加一个空格
NextWords
2)ForEach…Next语句:
主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句
ForEachelementIngroup
Statements
[Exitfor]
Statements
Next[element]
如1:
ForEachrang2Inrange1
Withrange2.interior
.colorindex=6
.pattern=xlSolid
Endwith
Next
这上面一例中用到了With…EndWith语句,目的是省去对象多次调用,加快速度;语法为:
Withobject
[statements]
EndWith
3)Do…loop语句在条件为true时,重复执行区块命令
Do{while|until}condition'while为当型循环,until为直到型循环,顾名思义,不多说啦
Statements
Exitdo
Statements
Loop
或者使用下面语法
Do'先do再判断,即不论如何先干一次再说
Statements
Exitdo
Statements
Loop{while|until}condition
10,其他类语句和错误语句处理
A,其他循环语句:
结构化程序使用以上判断和循环语句已经足够,建议不要轻易使用下面的语句,虽然VBA还支持。
1)Gotoline该语句为跳转到line语句行
2)Onexpressiongosubdestinatioinlist或者onexpressiongotodestinationlist语句为根据exprssion表达式值来跳转到所要的行号或行标记
3)Gosubline…line…Return语句,Return返回到Gosubline行,如下例:
Subgosubtry()
Dimnum
Num=inputbox(“输入一个数字,此值将会被判断循环”)
Ifnum>0thenGosubRoutine1:
Debug.printnum:
Exitsub
Routine1:
Num=num/5
Return
Endsub
4)while…wend语句,只要条件为TRUE,循环就执行,这是以前VB老语法保留下来的,如下例:
whilecondition'whileI<50[statements]'I=I+1wend'Wend
B,错误语句处理:
执行阶段有时会有错误的情况发生,利用OnError语句来处理错误,启动一个错误的处理程序。
语法如下:
OnErrorGotoLine '当错误发生时,会立刻转移到line行去
OnErrorResumeNext'当错误发生时,会立刻转移到发生错误的下一行去
OnErroGoto0'当错误发生时,会立刻停止过程中任何错误处理过程
5.5过程
在程序设计中经常会有重复的地方,可以把重复的部分独立为一个过程,在使用时进行调用,从而简化代码编写,提高编程效率。
过程可用于压缩重复任务或共享任务。
用过程编程有两大好处:
· 过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试。
· 一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件。
在VisualBasic中使用下列几种过程:
1.子(Sub)过程
[Private|Public][Static]Subname[(arglist)]
[statements]
[ExitSub]
[statements]
EndSub
Sub语句的语法包含下面部分:
Public|Private、Static声明函数的作用域、生存期。
Name:
必需的。
Sub的名称,遵循标准的变量命名约定。
Arglist:
可选的。
代表在调用时要传递给Sub过程的参数的变量列表。
多个变量则用逗号隔开。
Statements:
可选的。
Sub过程中所执行的任何语句组。
事件过程或其他过程可按名称调用子过程。
子过程能够接收参数,并可用于完成过程中的任务并返回一些数值。
但是,与函数过程不同,子过程不返回与其特定子过程名相关联的值(尽管它们能够通过变量名返回数值)。
子过程一般用于接收或处理输入数据、显示输出或者设置属性。
2.函数(Function)过程
[Public|Private][Static]Functionname[(arglist)][Astype]
[statements]
[name=expression]
[ExitFunction]
[statements]
[name=expression]
EndFunction
各参数分述如下:
Public|Private、Static:
声明函数的作用域、生存期。
Name:
必需的。
Function的名称,遵循标准的变量命名约定。
Arglist:
可选的。
代表在调用时要传递给Function过程的参数变量列表。
多个变量应用逗号隔开。
type:
可选的。
Function过程的返回值的数据类型,可以是Byte、Boolean、Integer、Long、