VB语法格式.docx
《VB语法格式.docx》由会员分享,可在线阅读,更多相关《VB语法格式.docx(25页珍藏版)》请在冰点文库上搜索。
VB语法格式
Call语句
描述
将控制权传递给Sub过程或Function过程。
语法
[Call]name[argumentlist]
Call语句语法有以下部分:
部分
描述
Call
可选关键字。
如果指定此关键字,则必须用括号把argumentlist括起来。
例如:
CallMyProc(0)
name
必选。
要调用的过程名。
argumentlist
可选。
传递给过程的变量、数组或表达式列表,用逗号分隔每一项。
说明
在调用过程时,不必使用Call关键字。
然而,如果使用Call关键字调用要求参数的过程,则必须用括号将argumentlist括起来。
如果省略Call关键字,那么必须也同时省略argumentlist参数两边的括号。
使用Call语法调用内部函数或使用用户自定义函数,函数返回值都会被放弃。
Const语句
描述
声明用于代替文字值的常数。
语法
[Public|Private]Constconstname=expression
Const语句的语法包含以下部分:
部分
描述
Public
可选。
该关键字用于在Script级中声明可用于所有Script中所有过程的常数。
不允许在过程中使用。
Private
可选。
该关键字用于在Script级中声明只可用在声明所在的Script中的常数。
不允许在过程中使用。
constname
必选。
常数的名称,根据标准的变量命名约定。
expression
必选。
文字或其他常数,或包括除Is外的所有算术操作符和逻辑操作符的任意组合。
说明
在默认情况下常数是公用的。
过程中的常数总是专有的,其可见性无法改变。
Script中,可用Private关键字来改变Script级常数可见性的默认值。
要在同一行中声明若干个常数,可用逗号将每个常数赋值分开。
用这种方法声明常数时,如果使用了Public或Private关键字,则该关键字对该行中所有常数都有效。
常数声明中不能使用变量、用户自定义的函数或VBScript内部函数(如Chr)。
按定义,它们不能是常数。
另外也不能从含有操作符的表达式中创建常数,即只允许使用简单常数。
在Sub或Function过程中声明的常数是该过程的局部常数。
在过程外声明的常数是声明所在的Script中的全局常数。
可以在任何使用表达式的地方使用常数。
注意常数可以使Script更具可读性,且易于修改。
在Script运行时,常数不会象变量那样无意中被改变。
Dim语句
描述
声明变量并分配存储空间。
语法
Dimvarname[([subscripts])][,varname[([subscripts])]]...
Dim语句的语法包含以下部分:
部分
描述
varname
变量的名称,符合标准变量命名约定。
subscripts
数组变量的维数,最多可以声明60维的数组。
subscripts参数使用以下语法:
upperbound[,upperbound]...
数组下界总是0。
说明
用Dim声明的Script级变量可用于Script中的所有过程,过程级变量只能用于过程中。
也可用带空圆括号的Dim语句来声明动态数组。
声明动态数组后,可在过程内使用ReDim语句来定义该数组的维数和元素。
如果试图重新定义在Dim语句中已经显式指定维数的数组,则会发生错误。
在初始化变量时,数值变量被初始化为0,字符串被初始化为零长度字符串("")。
提示在过程中使用Dim语句时,通常将Dim语句放在过程的开始处。
Do...Loop语句
描述
当条件为True时或条件变为True之前重复执行某语句块。
语法
Do[{While|Until}condition]
[statements]
[ExitDo]
[statements]
Loop
也可以使用下面的语法:
Do
[statements]
[ExitDo]
[statements]
Loop[{While|Until}condition]
Do...Loop语句语法有以下部分:
部分
描述
condition
数值或字符串表达式,其值为True或False。
如果condition为Null,则condition被当作False。
statements
当condition为True时被重复执行的一条或多条命令。
说明
ExitDo仅可以用在Do...Loop控制语句中,提供另一种退出Do...Loop的方法。
可以在Do...Loop语句中的任何位置放置任意个ExitDo。
ExitDo通常与条件判断语句(如If...Then)一起使用,将控制传递给紧随在Loop语句后面的语句。
当用于嵌套Do...Loop中的时候,ExitDo将控制传递给其所在循环的上一层嵌套循环。
Erase语句
描述
重新初始化固定大小数组的元素,并释放动态数组的存储空间。
语法
Erasearray
array参数是要清除的数组变量的名称。
说明
判断数组是固定长度数组(常规)还是动态数组是很重要的,这是因为Erase要根据数组的类型进行不同的操作。
Erase无需为固定大小的数组还原内存。
Erase按照下表设置固定数组的元素:
数组的类型
Erase对固定数组元素的影响
固定数值数组
将每个元素设置为0。
固定字符串数组
将每个元素设置为零长度字符串("")。
对象数组
将每个元素设置为特殊值Nothing。
Erase释放动态数组所使用的内存。
在程序再次引用该动态数组之前,必须使用ReDim语句来重新定义该数组变量的维数。
Exit语句
描述
退出Do...Loop、For...Next、Function或Sub代码块。
语法
ExitDo
ExitFor
ExitFunction
ExitSub
Exit语句的语法有以下几种形式:
语句
描述
ExitDo
提供一种退出Do...Loop语句的方法。
只能在Do...Loop语句中使用。
ExitDo将控制权转移到Loop语句之后的语句。
在嵌套的Do...Loop语句中使用时,ExitDo将控制权转移到循环所在位置的上一层嵌套循环。
ExitFor
提供一种退出For循环的方法。
只能在For...Next或ForEach...Next循环中使用。
ExitFor将控制权转移到Next之后的语句。
在嵌套的For循环中使用时,ExitFor将控制权转移到循环所在位置的上一层嵌套循环。
ExitFunction
立即从出现的位置退出Function过程。
继续执行调用Function的语句后面的语句。
ExitSub
立即从出现的位置退出Sub过程,继续执行调用Sub的语句后面的语句。
For...Next语句
描述
以指定次数重复执行一组语句。
语法
Forcounter=startToend[Stepstep]
[statements]
[ExitFor]
[statements]
Next
For...Next语句的语法包含以下部分:
部分
描述
counter
用做循环计数器的数值变量。
这个变量不能是数组元素或用户自定义类型的元素。
start
counter的初值。
end
counter的终值。
step
counter的步长。
如果没有指定,则step的默认值为1。
statements
For和Next之间的一条或多条语句,将被执行指定次数。
说明
step参数可以是正数或负数。
step参数值决定循环的执行情况,如下所示:
值
如果...则循环执行
正数或0
counter<=end
负数
counter>=end
当循环启动并且所有循环中的语句都执行后,step值被加到counter中。
这时,或者循环中的语句再次执行(基于循环开始执行时同样的测试),或者退出循环并从Next语句之后的语句继续执行。
提示在循环中改变counter的值,将会使程序代码的阅读和调试变得更加困难。
ExitFor只能用于ForEach...Next或For...Next结构中,提供另一种退出循环的方法。
可在语句中的任意位置放置任意个ExitFor语句。
ExitFor经常和条件判断语句一起使用(例如If...Then),并立即将控制权转移到Next之后的语句。
可以将一个For...Next循环放置在另一个For...Next循环中,组成嵌套循环。
每个循环中的counter要使用不同的变量名。
下面的结构是正确的:
ForI=1To10
ForJ=1To10
ForK=1To10
...
Next
Next
Next
ForEach...Next语句
描述
对数组或集合中的每个元素重复执行一组语句。
语法
ForEachelementIngroup
[statements]
[ExitFor]
[statements]
Next[element]
ForEach...Next语句的语法包含以下部分:
部分
描述
element
用来枚举集合或数组中所有元素的变量。
对于集合,element可能是Variant变量、通用Object变量或任意指定的Automation对象变量。
对于数组,element只能是Variant变量。
group
对象集合或数组的名称。
statements
对于group中的每一项执行的一条或多条语句。
说明
如果group中有至少一个元素,就会进入ForEach块执行。
一旦进入循环,便首先对group中第一个元素执行循环中的所有语句。
只要group中还有其他的元素,就会对每个元素执行循环中的语句。
当group中的没有其他元素时退出循环,然后从Next语句之后的语句继续执行。
ExitFor只能用于ForEach...Next或For...Next控制结构中,提供另一种退出循环的方法。
可在循环的任意位置放置任意个ExitFor语句。
ExitFor经常和条件判断语句一起使用(例如If...Then),并立即将控制权转移到Next之后的语句。
可以将一个ForEach...Next循环放置在另一个之中,组成嵌套式ForEach...Next循环。
但是每个循环的element必须是唯一的。
注意如果省略Next语句中的element,则程序仍会象已包含它一样继续执行。
如果Next语句在其相应的For语句之前出现,则会产生错误。
Function语句
描述
声明Function过程的名称、参数以及构成其主体的代码。
语法
[Public|Private]Functionname[(arglist)]
[statements]
[name=expression]
[ExitFunction]
[statements]
[name=expression]
EndFunction
Function语句的语法包含以下部分:
部分
描述
Public
表示Function过程可被所有Script中的所有其他过程访问。
Private
表示Function过程只可被声明它的Script中的其他过程访问。
name
Function的名称,遵循标准的变量命名约定。
arglist
代表调用时要传递给Function过程的参数的变量列表。
用逗号隔开多个变量。
statements
在Function过程的主体中执行的任意语句组。
expression
Function的返回值。
arglist参数包含下列语法和部分:
[ByVal|ByRef]varname[()]
部分
描述
ByVal
表示该参数按值传递。
ByRef
表示该参数按引用传递。
varname
代表参数变量的名称;遵循标准的变量命名约定。
说明
如没有显式指定使用Public或Private,则Function过程默认为公用,即它们对于Script中的所有其他过程是可见的。
Function中局部变量的值在对过程的调用中不被保留。
所有可执行代码必须包含于过程中。
不能在另一个Function或Sub过程中定义Function过程。
使用ExitFunction语句可以从Function过程中立即退出。
程序继续执行调用Function过程的语句之后的语句。
可在Function过程的任何位置出现任意个ExitFunction语句。
与Sub过程类似,Function过程是可以获取参数、执行一系列语句并改变其参数值的独立过程。
与Sub过程的不同之处是:
当要使用由函数返回的值时,可以在表达式的右边使用Function过程,这与内部函数的使用方式一样,例如Sqr、Cos或Chr。
在表达式中,可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用Function过程。
有关调用Function过程的详细信息,请参阅Call语句。
小心Function过程可以是递归的,即该过程可以调用自身以完成某个给定的任务。
但是,递归可能会导致堆栈溢出。
要从函数返回一个值,只需将值赋给函数名。
在过程的任意位置都可以出现任意个这样的赋值。
如果没有给name赋值,则过程将返回一个默认值:
数值函数返回0,字符串函数返回零长度字符串("")。
如果在Function中没有对象引用被指定给name(使用Set),则返回对象引用的函数将返回Nothing。
下面的样例说明如何给一个名为BinarySearch的函数赋返回值。
在此样例中,将False赋给了该函数名,表示没有找到某个值。
FunctionBinarySearch(...)
...
'未找到该值。
返回False值。
Iflower>upperThen
BinarySearch=False
ExitFunction
EndIf
...
EndFunction
在Function过程中使用的变量分为两类:
一类是在过程内显式声明的,另一类则不是。
在过程内显式声明的变量(使用Dim或等效方法)总是过程的局部变量。
被使用但没有在过程中显式声明的变量也是局部变量,除非在该过程外更高级别的位置显式声明它们。
小心过程可以使用没有在过程内显式声明的变量,但如果在Script级中任何定义的名称与之相同,则会发生名称冲突。
如果过程中使用的未声明的变量与另一个过程、常数或变量的名称相同,则会认为过程使用的是Script级的名称。
显式声明变量可以避免这类冲突。
可以使用OptionExplicit语句来强制显式声明变量。
小心VBScript可能会重新排列数学表达式以提高内部效率。
当Function过程修改数学表达式中变量的值时,应避免在同一表达式中使用该函数。
If...Then...Else语句
描述
根据表达式的值有条件地执行一组语句。
语法
IfconditionThenstatements[Elseelsestatements]
或者,使用块形式的语法:
IfconditionThen
[statements]
[ElseIfcondition-nThen
[elseifstatements]]...
[Else
[elsestatements]]
EndIf
If...Then...Else语句的语法包含以下部分:
部分
描述
condition
一个或多个下面两种类型的表达式:
数值或字符串表达式,其运算结果是True或False。
如果condition是Null,则condition被视为False。
形如TypeOfobjectnameIsobjecttype的表达式。
objectname是任何对象的引用,而objecttype则是任何有效的对象类型。
如果objectname是objecttype所指定的一种对象类型,则表达式为True;否则为False。
statements
如果condition为True时,执行的一条或多条(以冒号分开)语句。
condition-n
同condition。
elseifstatements
如果相关的condition-n为Ture时,执行的一条或多条语句。
elsestatements
如果前面没有condition或condition-n表达式为True时,执行的一条或多条语句。
说明
对于短小简单的测试,可以使用单行形式(第一种语法)。
但块形式(第二种语法)提供了比单行形式更强的结构化与适应性,比较容易阅读、维护及调试。
注意在单行语法中,可以执行多条语句作为If...Then判断的结果,但所有语句必须在同一行上并且以冒号分开,如下列语句所示:
IfA>10ThenA=A+1:
B=B+A:
C=C+B
当程序运行到If块(第二种语法)时,将测试condition。
如果condition是True,则执行Then之后的语句。
如condition是False,则每个ElseIf部分的条件式(如果有的话)会依次计算并加以测试。
当找到某个为True的条件时,则其相关的Then之后的语句会被执行。
如没有一个ElseIf语句是True(或没有ElseIf子句),则将执行Else之后的语句。
执行Then或Else之后的语句以后,将继续执行EndIf之后的语句。
Else和ElseIf子句都是可选的。
在If块中可以放置任意多个ElseIf子句,但是都必须在Else子句之前。
If块语句可以被嵌套,即被包含在另一个If块语句之中。
要判断某个语句是否是一个If块,可检查Then关键字之后是什么。
如果在Then的同一行之后还有其他非注释的内容,则此语句就是单行形式的If语句。
If块语句必须是某一行的第一条语句,并且必须以EndIf语句结束。
OnError语句
描述
启动错误处理程序。
语法
OnErrorResumeNext
说明
若不使用OnErrorResumeNext语句,发生的任何运行时错误都将是致命的,即,显示错误信息并终止运行。
OnErrorResumeNext会使程序从紧随产生错误的语句之后的语句继续执行,或是从紧随最近一次调用过程(该过程含有OnErrorResumeNext语句)的语句继续运行。
这个语句可以不顾运行时错误,继续执行程序,之后您可以在过程内部建立错误处理例程。
在调用另一个过程时,OnErrorResumeNext语句变为非活动的。
所以,如果希望在例程中进行内部错误处理,则应在每一个调用的例程中执行OnErrorResumeNext语句。
OptionExplicit语句
描述
用于Script级强制要求显式声明该Script中的所有变量。
语法
OptionExplicit
说明
如果使用OptionExplicit,该语句必须出现在Script的任何过程之前。
使用OptionExplicit语句时,必须使用Dim、Private、Public或ReDim语句显式声明所有变量。
如果试图使用未经声明的变量名,则会出现错误。
提示可用OptionExplicit避免拼错已存在的变量名称。
对于作用范围不清楚的变量,使用此语句可避免发生混淆。
Private语句
描述
用于在Script级中声明私有变量及分配存储空间。
语法
Privatevarname[([subscripts])][,varname[([subscripts])]]...
Private语句的语法包含以下部分:
部分
描述
varname
变量的名称,遵循标准变量命名约定。
subscripts
数组变量的维数,最多可以声明60维的数组。
subscripts参数使用下列语法:
upper[,upper]...
数组的下界总是0。
说明
Private变量只能在声明该变量的Script中使用。
在使用引用对象的变量之前,必须用Set语句将某个现有对象赋予此变量。
在赋值之前,所声明的对象变量有一个特殊的值Nothing。
也可用带空圆括号的Private语句声明动态数组。
声明动态数组后,可在过程内使用ReDim语句定义该数组的维数和元素。
如果在Private、Public或Dim语句中已显式指定数组大小,却试图重新声明数组维数,就会发生错误。
在初始化变量时,数值变量被初始化为0,字符串被初始化为零长度字符串("")。
提示在过程中使用Private语句时,通常将Private语句放在过程的开始处。
Public语句
描述
用于在Script级中声明公用变量和分配存储空间。
语法
Publicvarname[([subscripts])][,varname[([subscripts])]]...
Public语句的语法包含以下部分:
部分
描述
varname
变量的名称,遵循标准变量命名约定。
subscripts
数组变量的维数;最多可以声明60维的数组。
subscripts参数使用下列语法:
upper[,upper]...
数组的下界总是0。
说明
使用Public语句声明的变量可用于所有项目的全部Script中的所有过程。
在使用引用对象的变量之前,必须用Set语句将某个已有对象赋予该变量。
在赋值之前,所声明的对象变量有一个特殊的值Nothing。
也可用带空圆括号的Public语句来声明动态数组。
声明动态数组后,可在过程内使用ReDim语句来定义该数组的维数和元素。
如果试图重新声明数组变量的