vbscript入门到精通
VBScriptPage 3 of 229K/IITML大多数脚本代码在Sub或 Function过程中,仅在其他代码要凋冂它时执行。然而,也可以将 VBScript代码放在过程之外、 SCRIPT块之中。这类代码仅在HTⅦL页面加载时执行一次。这样就可以在加载Web页面时初始化数据或动态地改变页面的外观。2000 Microsoft Corporation版权所有。保舀所有权利。使用规定。Visua. I Basic Scripting edition语言参考VBScript基础VBScript数据类型VBScript变量SCript常数VBScript运算符使用条件语句编码循环VBScript过程VBScript编码惯例e2000 Microsoft Corporation版权所有。保留所有权利。使用规定。Visual Basic Scripting edition语言参考VBScript数据类型SCript只有一和数据类型,称为 Variant。 Variant是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为 Variant是Ⅴ SCript中唯一的数据类型,所以它也是 VBScript中所有函数的返回值的数据类型最简单的 Variant可以包含数字或字符串信息。 Variant用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则 VBScript会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是宇符串,则Ⅶ Script将按字符串处理。也可以将数字包含在引号("〃)中使其成为字符Variant子类型除简单数字或字符申以外, Variant可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是麦示为日期或昧间ε从 Boolean值到浮点数,数值信息是多种多栟的。Variant包含的数值信息类型称为∫类型。大多数情况卜,可将所需的数拈放进 Variant中,而 Variant也会按照最适用于其包含的数据的方式进行操作。下表显示 Variant包含的数据子类型:子类型描述mpty未初始化的 Variant。对于数值变量,值为0:对于字符串变量,值为零长度字符串(")。Null不包含任何有效数据的 VariantBoolean包含True或 False。Byte包含0至25之间的整数liege庖包含-32,768到32,767之间的整数。Currencv-92237,203,685,477.5808到922,37203,685,477.5807Long庖含=2,1417,483,648到2,147,483,647之间的整数Single包含单精度浮点数,负数范围从-3.402823E38到-1.401298E-45,正数范围从1.401298E-45到3.402823E38。包含双精度浮点数,负数范围从-1.79769313486232E30g到-4.94065645841247E-324,正数范围从A.94065645841247E-324到1.79769313486232E308。Date(Iime)包含表示日期的数字,日期范围从公元1001月1日到公元9912月31日file: //E: Temp hhC746 htm200910-30VBScriptPage 4 of 229String包含变长字符串,最大长度可为20亿个字符Object包含对象包含错误号。烋可以使用转换函数来转换数据的子类犁。另外,可使用 Varitype函数返叵数据的 Variant子类型。2000 Microsoft Corporation版权所有。保首所有权利。使用規定visual basic scripting edition语言参考VBScript变量变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。例如,可以创建个名为 ClickCount的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在 VBScript中只有一个基本数据类型,即 Variant,因此所有变量的数据关型都是 Variant。声明变量声明变量的一种方式是使用Di语句、 Public语句和 Private语句在本中显式声明变量。例如im Degrees Fahrenheit声明多个变量时,使用逗号分隔变量。例如:Dim Top, Bottom, Left, Rigat另一和方式是通过直接在脚木中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,囚为这样有时会由于变量名被拼借而导致在运行胭本时出现意外的结果。因此,最好使用 Option Explicit语句显式声明所有变量,并将其作为脚本的第一条语句命名规则变量命名必须遵循 VBScript的标准命名规则。变量命名必须遵循:不能包含嵌入的句点长度不能超过255个字符。●在被声明的作用域内必须唯一。变量的作用域与存活期变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有屙部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被脚本中所有过程所识别,称为 Script缴变量,貝有脚本级作用域。变量存在的时间称为存活期。Sεript级交量的存活期从被声明的一刻起,直刭脚本运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。给变量赋值创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值在表达式右边。例如:B=20y标量变量和数组变量多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方使,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯的区戎是声明数组变量时变量名后面带有括号()。下例声明了一个包含11个元素的一维数组Dim A(10虽然括号中显示的数字是10,但由于在 VBScript中所有数组都是基于0的,所以这个数组实际上包含11个元素。在基file: //E: Temp hhC746 htm200910-30VBScriptPage 5 of 229于0的薮组中,数组元素的数目总是括号中显示的数目加1。这种薮组被称为定大小的数组。在数组中使用索引为数组的每个元素赋值。从0到10,将数据赋给数组的元素,如下所示A(0)-256A(1)-324A(2)=100A(10)=55与此类似,使用索引可以检索到所需的薮组元素的数据。例如SomeVariable =A(8)数组并不仪限于一维。数组的维数最大可以为60(尽管大多数人不能理解超过3或4的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中, MyTable变量是一个有6行和11列的二维数组Dim MyTable(5, 10)在二维数组中,括号中第一个数宇表示行的数目,第二个数字表示列的数日也可以声明动态数组,即在运行脚本时人小发生变化的数组。对数组的最初声明使用Dim语句或 Redim语句。但是对于动态数组,括号中不包含任何数字。例如Dim My ArrayieDim AnotherArray (要使用动态数组,必须随后使用 Redim确定维数和每一维的大小。在下例中, ReDim将动态数组的初始大小设置为25,而后面的ReDi皿语句将薮组的大小重新调整为30,同时使用 Preserve关键字在重新调整大小时保留数组的内容ReDim My array (25)Re Dim Preserve MyArray(重新调整动态数组大小的次数是没有仼何限制的,将数组的大小调小时,将会丢失被刑除元素的数据。s2000 Microsoft Corporation版权所有。保所有权利。使用规定Visual basic scripting edition语言参考VBScript常数常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。 VBScript定义了许多内部常数。详细信息,请参阅VBScript语言参考。创建常数您可以使用 Const语句在 VBScript中创建用户自定义常数。使用 Canst语句可以创建名称具有一定含义的字符串型或数型常数,并给它们赋原义值。例如nst My String="这是一个字符串。Const My Age =49请注意宇符串文字包含在两个引号(″")之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号(#)之间。例如ate=#6-1-97#最好采用一个命名方案以区分常数和变量。这样可以避免在运行脚本时对常数重新赋值。例如,可以使用“vb”或“con”作常数名的前缀,或将常数名的所有字母大写。将常数和变量区分开可以在开发复杂的却本时痉免混乱。s2000 Microsoft Corporation版权所有。保舀所有权利。使用规定Visual basic Scripting edition语言参考VBScript运算符file: //E: Temp hhC746 htm200910-30VBScriptPage 6 of 229VBScript有一套完整的运算符,包括算术运算符、比较运算符、连接运算符和逻辑运算符。运算符优先级当表达式包含多个运算符时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序,强制首先计算表达式的苿些部分。运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。但是,在括号中仍遵循标准运算符优先级。当表达式包含多种运算芢时,首先计算算术运算符,然后计算比较运算竽,最后计算逻辑运算符。所有比较运算符的优先级相同,即按照从左到石的顺序计算比较运算符。算术运算符和逻辑运算筲的优先级如下所示算术运算符比较运算符逻辑运算符描述符号描述符号描述符号负号逻辑与d乘辑或逻辑异或整除」小于等于逻辑等价求余Mod大于等于逻辑隐Imp对象引用比较『行连按当乘号与除号叵时岀现在一个表达式中时,按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时,按从左到右的顺序计算加、减运算符宇符串连接(&)运算符↑是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。Is运算符是对象引用比较运算符。它并不比较对象或对象的值,而只是进行检査,判淅两个对象引用是否引用同一个对象s2000 Microsoft Corporation版权所有。保舀所有权利。使用炕定。Visual Basic Scripting edition语言参考使用条件语句控制程序执行使用条件语句和循环讧句可以控制脚夲的流程。使用条件语句π以编写进行判断和重复操作的 VBScript代码。在SCript中可使用以下条件语句Ir...Then..Else语句Select case语句使用If..Then.E1se进行判断If..Then..Else诘句用于计算条件是舌为True或 False,并且杺据计算结果指定婁运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息,请参阅比较运算符。If.,Then,Elsc话句可以按照需婁进行嵌套。条件为True时运行语句要在条件为True时运行单行语句,可使用If..Then,,Else语句的单行语法。下例示范了单行语法。请注意此例省略了关键字E1se。Sub fixate aDim myDatemyDate=#2/13/95#If myDate Now Then nyDate NowEnd sub要运行多行代码,必须使用多行(或块)语法。多行(或块)话法包含 End if语句,如下所示Sub alertUser (valuc)I- value =0 Therfile: //E: Temp hhC746 htm200910-30VBScriptPage 7 of 229Alertlabel foreColor brEdAlertlabel. Tont. dole= trueAlertlabel. Font, Italic= TrueEnd IfEnd sub条件为1rue和 False时分别运行某些语句叮以使用If..Then..Else语句定义两个可执行语句块:条件为True时运行某一语句块,条件为 False时运行另一语句块Sub alertUser(valueI valueAlertlabel foreC or brEdAlertlabel. Font, Bolc trueAlertlabel. Font, italic= trueAlertlabel Forecolor vbblackAlertlabel. Font Bolc= falseAlertlabel. Font, italic= falsEnd ifEnd sub对多个条件进行判断If. Then,. Else语句的一种变形允许您从多个条件中选择,即添加 ElseIf子句以扩充If. Then,.E1se话句的功能,使您可以控制基于多种可能的程序流程。例如Sub reportvalue (value)I value =0MsgBox valueCIself value =1 theMsgBox valueCIse if value =2 thenMsgbox valueCIseMsgbox"数值起出范围!End If可以添加仟意多个 Else lf子句以提供多种选择ε使用多亼 Else lf子句经常会变得很累赘。冇多个条件中进行选择的更好方法是使用 Select case语句使用 Select case进行判断Select case结构提供了If.,Then..E1seIf结构的一个变通形式,可以从多个语句块中选择执行其中的一个。 SelectCase诰句提供的功能与If..Then.Blse诰句类似,但是可以使代码史加简练易读Select case结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个Case的值比较。如果兀配,则执行与该Case关联的语句块,示例代码如下:clect Casc Document Forml CardType Options(SelectedIndex).TextCase Master Card1splayMClcgoalidate MCAc countCase visaDisplay v isalogoⅤ amidatee American ExpressDi3p⊥ ayAMEXCOLogoValidateAMeXCoAc countCase elDisplayUnknownImagePromptAgainEnd se lect请注意 Select case结构只计算开始处的一个表达式(只计算一次),而If.Then.. ElseIf结构计算每个 ElseIf语句的表达式,这些表达式可以各不相同。仅当每个 Elself语句计算的表达式都相同时,才可以使用 Select Case结构代替If.Then.. Elself结构。s2000 Microsoft Corporation版权所有。保舀所有杈利。使用规定。visual Basic Scripting edition语言参考使用循环语句file: //E: Temp hhC746 htm200910-30VBScriptPage 8 of 229循环用于重复执行一组语句。循环可分为三类:一类在条件变为Fals之前重复执行语句,一类在条件变为True之前重复执行语句,另一类按照指定的次数重复执行语句。在 VBScript巾可仗用下列循环语句Do..Lop:当(或直到)条件为True吋循环While..,Wend:当条仵为True时循环。For.NexL:指定循环次数,使用计数器重复运行语句。For each.. Next:对于集合中的每项或数组中的每个元素,重复执行一组语句。使用Do循环可以使用Do...Loop语句多次(次数不定)运行语句块c当条件为True时或条件变为True之前,重复执行话句块。当条件为True时重复执行语句While关键字用于检査Do..·Lop语句中的条件。有两种方式检査条件:在进入循环之前检查条件(如下面的ChkfirstWhile示例);或者在循环至少运行完一次之后检查条件(如下面的 ChkLastWhile示例)。在 Chkfirstwhile过程中,如果皿yNu旳初始值被设置为9而不是20,则永远不会执行循环体中的语句。在 Clklastwhile过程中,循环体中的语句只会执行一次,因为条件在检查时已绎为 FalseSub ChkFirstWhileoDim counter, my Nucounter =0my Num= 20Do While my Ntmy Num- myNum-Icounter counteroopMsgbox"循环重复了"& counter&"”次上 nd subub ChkLast While oDim counter, my Numcounter =0my Mum- my Num-1counter counter +1Loop While myNum >10MsgBox"循坏重复∫"& counter&”次。End sub重复执行语句直到条件变为TrueUntil关键字用于检杳Do.Lop语句中的条件。冇两和方式检昋条件:在进入循环之前检杳条件(如下面的hkfirs tUntil小例);或者在循环至少运行完一次之后检查条件(如下面的 Chklas tUnt i1小例)。只要条件为Fa1se,就会进行循环Sub ChkFirstUntiloDim counter, my Numcounter =oDo Until my Nummy Num= myNum-1counter counter+LMsgBox“"循坏亘复∫"& counter&”次。End subSub ChkLastUntil oDim counter, my Numcounter =0miNum= lmy Num my Num +1counter counterLoop Until myNum=10MsgBox"循环重复了"& counter&”次。"退出循环xit do语句用于退出υo..Laop循环。因为通常只是在某些特殊情况下要退出循环(例如要避免死循环),所以可在If..Then.Else语句的True语勹块中使用 Exit do语句。如果条件为 False,循环将照常运行。在下面的示例中, my Num的初始值将导致死循环εIf£..Then.Ese诟句检查此条件,防止出现死循环。file: //E: Temp hhC746 htm200910-30VBScriptPage of 229Sub lxitExampleoDim counter, my Numt0my\um =9Do Until my Num =10Num my Num-1counter counterIf my Num< 10 Then Exit DMsgBox"循环重复了"& counter&"次。End sub使用 While..WendWhile...Wend语句是为那些熟悉其用沄的用户提供的。但是由于 While...Wend缺少灵活性,所以建议最好使用Do,,Loop语句。使用For..NextFor.Neκt语句用于将语句块运行指定的次数。在循环中使用计数器变量,该变量的值每一次循环曾加或减少。例如,下面的示例将过程 My Proc重复执行50次。For语句指定计数器变量x及其起始值与终止值。Nxt语句使计数器变量每次加1。Sul DoMy Proc 50T i e: s ODim xTor x=1 To 50MyProcEnd sub关键字Step用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量j每次加2。循环结束后, total的值为2、4、6、8和10的总和。Sub twos TotalDim j, total2 To 10 Step 2otal total+NextMsgBox"总知为"& total&"。End sub要使计数器变量递减,可将Step设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,讣数器变量myum每次诫2。循环结柬后, total的值为16、14、12、10、8、6、4和2的总和。Sub NewlotaloDim my Num, totalFor myNum- 16 To 2 Step-2Ne. total- total+mvNumMsgBox总和为"& total&"。End subExit For话句用于在计数器达到其终止值之前退出For.Next语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在Ir..Then..Else语句的True语句块中使用 Exit for语句。如果条件为 False,循环将照常运行使用 For each...NextFor each..Next循环与For..Next循环类似。 For each...Next不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。在以下示例中, Dictionary对象的内容用于将文本分别放置在多个文本框中HTML>