《VBScript微软官方教程教学教材.doc》由会员分享,可在线阅读,更多相关《VBScript微软官方教程教学教材.doc(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。VBScript微软官方教程-VBScript微软官方教程MicrosoftVisualBasicScriptingEdition是程序开发语言VisualBasic家族的最新成员,它将灵活的Script应用于更广泛的领域,包括MicrosoftInternetExplorer中的Web客户机Script和MicrosoftInternetInformationServer中的Web服务器Script。易学易用如果您已了解VisualBasic或VisualBasicforApplications,就会
2、很快熟悉VBScript。即使您没有学过VisualBasic,只要学会VBScript,就能够使用所有的VisualBasic语言进行程序设计。虽然您可以从本教程的几个Web页面中学习VBscript,但是本教程并没有告诉您如何编程。要学习编程,请阅读由MicrosoftPress出版的StepbyStep。ActiveXScriptVBScript使用ActiveXScript与宿主应用程序对话。使用ActiveXScript,浏览器和其他宿主应用程序不再需要每个Script部件的特殊集成代码。ActiveXScript使宿主可以编译Script、获取和调用入口点及管理开发者可用的命名空间
3、。通过ActiveXScript,语言厂商可以建立标准Script运行时语言。Microsoft将提供VBScript的运行时支持。Microsoft正在与多个Internet组一起定义ActiveXScript标准以使Script引擎可以互换。ActiveXScript可用在MicrosoftInternetExplorer和MicrosoftInternetInformationServer中。其他应用程序和浏览器中的VBScript作为开发者,您可以在您的产品中免费使用VBScript源实现程序。Microsoft为32位WindowsAPI、16位WindowsAPI和Macintos
4、h提供VBscript的二进制实现程序。VBScript与WorldWideWeb浏览器集成在一起。VBScript和ActiveXScript也可以在其他应用程序中作为普通Script语言使用。SCRIPT元素用于将VBScript代码添加到HTML页面中。标记VBScript代码写在成对的标记之间。例如,以下代码为一个测试传递日期的过程:2EndFunction-代码的开始和结束部分都有标记。LANGUAGE属性用于指定所使用的Script语言。由于浏览器能够使用多种Script语言,所以必须在此指定所使用的Script语言。注意CanDeliver函数被嵌入在注释标记()中。这样能够避免
5、不能识别标记的浏览器将代码显示在页面中。因为以上示例是一个通用函数(不依赖于任何窗体控件),所以可以将其包含在页面的HEAD部分:订购2EndFunction-.SCRIPT块可以出现在HTML页面的任何地方(BODY或HEAD部分之中)。然而最好将所有的一般目标Script代码放在HEAD部分中,以使所有Script代码集中放置。这样可以确保在BODY部分调用代码之前所有Script代码都被读取并解码。上述规则的一个值得注意的例外情况是,在窗体中提供内部代码以响应窗体中对象的事件。例如,以下示例在窗体中嵌入Script代码以响应窗体中按钮的单击事件:测试按钮事件MsgBox按钮被单击!大多数
6、Script代码在Sub或Function过程中,仅在其他代码要调用它时执行。然而,也可以将VBScript代码放在过程之外、SCRIPT块之中。这类代码仅在HTML页面加载时执行一次。这样就可以在加载Web页面时初始化数据或动态地改变页面的外观。什么是VBScript数据类型?VBScript只有一种数据类型,称为Variant。Variant是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为Variant是VBScript中唯一的数据类型,所以它也是VBScript中所有函数的返回值的数据类型。最简单的Variant可以包含数字或字符串信息。Variant用于数字上下文中
7、时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则VBScript会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则VBScript将按字符串处理。当然,也可以将数字包含在引号()中使其成为字符串。Variant子类型除简单数字或字符串以外,Variant可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。当然,从Boolean值到浮点数,数值信息是多种多样的。Variant包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进
8、Variant中,而Variant也会按照最适用于其包含的数据的方式进行操作。下表显示Variant包含的数据子类型:子类型描述Empty未初始化的Variant。对于数值变量,值为0;对于字符串变量,值为零长度字符串()。Null不包含任何有效数据的Variant。Boolean包含True或False。Byte包含0到255之间的整数。Integer包含-32,768到32,767之间的整数。Currency-922,337,203,685,477.5808到922,337,203,685,477.5807。Long包含-2,147,483,648到2,147,483,647之间的整数。S
9、ingle包含单精度浮点数,负数范围从-3.402823E38到-1.401298E-45,正数范围从1.401298E-45到3.402823E38。Double包含双精度浮点数,负数范围从-1.79769313486232E308到-4.94065645841247E-324,正数范围从4.94065645841247E-324到1.79769313486232E308。Date(Time)包含表示日期的数字,日期范围从公元100年1月1日到公元9999年12月31日。String包含变长字符串,最大长度可为20亿个字符。Object包含对象。Error包含错误号。您可以使用转换函数来转换
10、数据的子类型。另外,可使用VarType函数返回数据的Variant子类型。什么是变量?变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息。例如,可以创建一个名为ClickCount的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在VBScript中只有一个基本数据类型,即Variant,因此所有变量的数据类型都是Variant。声明变量声明变量的一种方式是使用Dim语句、Public语句和Private语句在Script中显式声明变量。例如:DimD
11、egreesFahrenheit声明多个变量时,使用逗号分隔变量。例如:DimTop,Bottom,Left,Right另一种方式是通过直接在Script中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行Script时出现意外的结果。因此,最好使用OptionExplicit语句显式声明所有变量,并将其作为Script的第一条语句。命名规则变量命名必须遵循VBScript的标准命名规则。变量命名必须遵循: 第一个字符必须是字母。 不能包含嵌入的句点。 长度不能超过255个字符。 在被声明的作用域内必须唯一。变量的作用域与存活期变量的作用域由声
12、明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被Script中所有过程所识别,称为Script级变量,具有Script级作用域。变量存在的时间称为存活期。Script级变量的存活期从被声明的一刻起,直到Script运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。给变量赋值创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值
13、在表达式右边。例如:B=200标量变量和数组变量多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号()。下例声明了一个包含11个元素的一维数组:DimA(10)虽然括号中显示的数字是10,但由于在VBScript中所有数组都是基于0的,所以这个数组实际上包含11个元素。在基于0的数组中,数组元素的数目总是括号中显示的数目加1。这种数组被称为固定大小的数组。在数组中使用索引为数组的每个元素赋值。从0到10
14、,将数据赋给数组的元素,如下所示:A(0)=256A(1)=324A(2)=100.A(10)=55与此类似,使用索引可以检索到所需的数组元素的数据。例如:.SomeVariable=A(8).数组并不仅限于一维。数组的维数最大可以为60(尽管大多数人不能理解超过3或4的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable变量是一个有6行和11列的二维数组:DimMyTable(5,10)在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。也可以声明动态数组,即在运行Script时大小发生变化的数组。对数组的最初声明使用Dim语句或ReDim语
15、句。但是对于动态数组,括号中不包含任何数字。例如:DimMyArray()ReDimAnotherArray()要使用动态数组,必须随后使用ReDim确定维数和每一维的大小。在下例中,ReDim将动态数组的初始大小设置为25,而后面的ReDim语句将数组的大小重新调整为30,同时使用Preserve关键字在重新调整大小时保留数组的内容。ReDimMyArray(25).ReDimPreserveMyArray(30)重新调整动态数组大小的次数是没有任何限制的,但是应注意:将数组的大小调小时,将会丢失被删除元素的数据。什么是常数?常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。VB
16、Script定义了许多固有常数。详细信息,请参阅VBScript语言参考。创建常数您可以使用Const语句在VBScript中创建用户自定义常数。使用Const语句可以创建名称具有一定含义的字符串型或数值型常数,并给它们赋原义值。例如:ConstMyString=这是一个字符串。ConstMyAge=49请注意字符串文字包含在两个引号()之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号(#)之间。例如:ConstCutoffDate=#6-1-97#最好采用一个命名方案以区分常数和变量。这样可以避免在运行Script时对常数重新赋值。例如,可以使用“vb”
17、或“con”作常数名的前缀,或将常数名的所有字母大写。将常数和变量区分开可以在开发复杂的Script时避免混乱。VBScript有一套完整的运算符,包括算术运算符、比较运算符、连接运算符和逻辑运算符。运算符优先级当表达式包含多个运算符时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序,强制首先计算表达式的某些部分。运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。但是,在括号中仍遵循标准运算符优先级。当表达式包含多种运算符时,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。所有比较运算符的优先级相同,即按照从左到右的顺序计算比较运算符
18、。算术运算符和逻辑运算符的优先级如下所示:算术运算符比较运算符逻辑运算符描述符号描述符号描述符号求幂等于=逻辑非Not负号-不等于逻辑与And乘*小于逻辑异或Xor整除小于等于=逻辑隐含Imp加+对象引用比较Is减-字符串连接&当乘号与除号同时出现在一个表达式中时,按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时,按从左到右的顺序计算加、减运算符。字符串连接(&)运算符不是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。Is运算符是对象引用比较运算符。它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。控制程序执行使
19、用条件语句和循环语句可以控制Script的流程。使用条件语句可以编写进行判断和重复操作的VBScript代码。在VBScript中可使用以下条件语句: If.Then.Else语句 SelectCase语句使用If.Then.Else进行判断If.Then.Else语句用于计算条件是否为True或False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息,请参阅比较运算符。If.Then.Else语句可以按照需要进行嵌套。条件为True时运行语句要在条件为True时运行单行语句,可使用If.Then.Else语句的单行语法。下例
20、示范了单行语法。请注意此例省略了关键字Else。SubFixDate()DimmyDatemyDate=#2/13/95#IfmyDate10myNum=myNum-1counter=counter+1LoopMsgBox循环重复了&counter&次。EndSubSubChkLastWhile()Dimcounter,myNumcounter=0myNum=9DomyNum=myNum-1counter=counter+1LoopWhilemyNum10MsgBox循环重复了&counter&次。EndSub重复执行语句直到条件变为TrueUntil关键字用于检查Do.Loop语句中的条件。
21、有两种方式检查条件:在进入循环之前检查条件(如下面的ChkFirstUntil示例);或者在循环至少运行完一次之后检查条件(如下面的ChkLastUntil示例)。只要条件为False,就会进行循环。SubChkFirstUntil()Dimcounter,myNumcounter=0myNum=20DoUntilmyNum=10myNum=myNum-1counter=counter+1LoopMsgBox循环重复了&counter&次。EndSubSubChkLastUntil()Dimcounter,myNumcounter=0myNum=1DomyNum=myNum+1counter=
22、counter+1LoopUntilmyNum=10MsgBox循环重复了&counter&次。EndSub退出循环ExitDo语句用于退出Do.Loop循环。因为通常只是在某些特殊情况下要退出循环(例如要避免死循环),所以可在If.Then.Else语句的True语句块中使用ExitDo语句。如果条件为False,循环将照常运行。在下面的示例中,myNum的初始值将导致死循环。If.Then.Else语句检查此条件,防止出现死循环。SubExitExample()Dimcounter,myNumcounter=0myNum=9DoUntilmyNum=10myNum=myNum-1count
23、er=counter+1IfmyNum10ThenExitDoLoopMsgBox循环重复了&counter&次。EndSub使用While.WendWhile.Wend语句是为那些熟悉其用法的用户提供的。但是由于While.Wend缺少灵活性,所以建议最好使用Do.Loop语句。使用For.NextFor.Next语句用于将语句块运行指定的次数。在循环中使用计数器变量,该变量的值随每一次循环增加或减少。例如,下面的示例将过程MyProc重复执行50次。For语句指定计数器变量x及其起始值与终止值。Next语句使计数器变量每次加1。SubDoMyProc50Times()DimxForx=1T
24、o50MyProcNextEndSub关键字Step用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量j每次加2。循环结束后,total的值为2、4、6、8和10的总和。SubTwosTotal()Dimj,totalForj=2To10Step2total=total+jNextMsgBox总和为&total&。EndSub要使计数器变量递减,可将Step设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,计数器变量myNum每次减2。循环结束后,total的值为16、14、12、10、8、6、4和2的总和。SubNewTotal()DimmyNum,totalFo
25、rmyNum=16To2Step-2total=total+myNumNextMsgBox总和为&total&。EndSubExitFor语句用于在计数器达到其终止值之前退出For.Next语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在If.Then.Else语句的True语句块中使用ExitFor语句。如果条件为False,循环将照常运行。使用ForEach.NextForEach.Next循环与For.Next循环类似。ForEach.Next不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有
26、用。在以下示例中,Dictionary对象的内容用于将文本分别放置在多个文本框中:窗体与元素FORMNAME=frmForm过程分类在VBScript中,过程被分为两类:Sub过程和Function过程。Sub过程Sub过程是包含在Sub和EndSub语句之间的一组VBScript语句,执行操作但不返回值。Sub过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Sub过程无任何参数,则Sub语句必须包含空括号()。下面的Sub过程使用两个固有的(或内置的)VBScript函数,即MsgBox和InputBox,来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用VBScri
27、pt创建的Function过程完成。此过程在以下讨论之后演示。SubConvertTemp()temp=InputBox(请输入华氏温度。,1)MsgBox温度为&Celsius(temp)&摄氏度。EndSubFunction过程Function过程是包含在Function和EndFunction语句之间的一组VBScript语句。Function过程与Sub过程类似,但是Function过程可以返回值。Function过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Function过程无任何参数,则Function语句必须包含空括号()。Function过程通过函数名返回一个值
28、,这个值是在过程的语句中赋给函数名的。Function返回值的数据类型总是Variant。在下面的示例中,Celsius函数将华氏度换算为摄氏度。Sub过程ConvertTemp调用此函数时,包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。SubConvertTemp()temp=InputBox(请输入华氏温度。,1)MsgBox温度为&Celsius(temp)&摄氏度。EndSubFunctionCelsius(fDegrees)Celsius=(fDegrees-32)*5/9EndFunction过程的数据进出给过程传递数据的途径是使用参数。参数被作为要传递给过
29、程的数据的占位符。参数名可以是任何有效的变量名。使用Sub语句或Function语句创建过程时,过程名之后必须紧跟括号。括号中包含所有参数,参数间用逗号分隔。例如,在下面的示例中,fDegrees是传递给Celsius函数的值的占位符:FunctionCelsius(fDegrees)Celsius=(fDegrees-32)*5/9EndFunction要从过程获取数据,必须使用Function过程。请记住,Function过程可以返回值;Sub过程不返回值。在代码中使用Sub和Function过程调用Function过程时,函数名必须用在变量赋值语句的右端或表达式中。例如:Temp=Cel
30、sius(fDegrees)或MsgBox温度为&Celsius(fDegrees)&摄氏度。调用Sub过程时,只需输入过程名及所有参数值,参数值之间使用逗号分隔。不需使用Call语句,但如果使用了此语句,则必须将所有参数包含在括号之中。下面的示例显示了调用MyProc过程的两种方式。一种使用Call语句;另一种则不使用。两种方式效果相同。CallMyProc(firstarg,secondarg)MyProcfirstarg,secondarg请注意当不使用Call语句进行调用时,括号被省略。什么是编码约定?编码约定是帮助您使用MicrosoftVisualBasicScriptingEdi
31、tion编写代码的一些建议。编码约定包含以下内容: 对象、变量和过程的命名约定 注释约定 文本格式和缩进指南使用一致的编码约定的主要原因是使Script或Script集的结构和编码样式标准化,这样代码易于阅读和理解。使用好的编码约定可以使源代码明白、易读、准确,更加直观且与其他语言约定保持一致。常数命名约定VBScript的早期版本不允许创建用户自定义常数。如果要使用常数,则常数以变量的方式实现,且全部字母大写以和其他变量区分。常数名中的多个单词用下划线(_)分隔。例如:USER_LIST_MAXNEW_LINE这种标识常数的方法依旧可行,但您还可以选择其他方案,用Const语句创建真正的常数
32、。这个约定使用大小写混合的格式,并以“con”作为常数名的前缀。例如:conYourOwnConstant变量命名约定出于易读和一致性的目的,请在VBScript代码中使用以下变量命名约定:子类型前缀示例BooleanblnblnFoundBytebytbytRasterDataDate(Time)dtmdtmStartDoubledbldblToleranceErrorerrerrOrderNumIntegerintintQuantityLonglnglngDistanceObjectobjobjCurrentSinglesngsngAverageStringstrstrFirstName变
33、量作用域变量应定义在尽量小的作用域中。VBScript变量的作用域如下所示:作用域声明变量处可见性过程级事件、函数或子过程在声明变量的过程中可见Script级HTML页面的HEAD部分,任何过程之外在Script的所有过程中可见变量作用域前缀随着Script代码长度的增加,有必要快速区分变量的作用域。在类型前缀前面添加一个单字符前缀可以实现这一点,而不致使变量名过长。作用域前缀示例过程级无dblVelocityScript级ssblnCalcInProgress描述性变量名和过程名变量名或过程名的主体应使用大小写混合格式,并且尽量完整地描述其目的。另外,过程名应以动词开始,例如InitName
34、Array或CloseDialog。对于经常使用的或较长的名称,推荐使用标准缩写以使名称保持在适当的长度内。通常多于32个字符的变量名会变得难以阅读。使用缩写时,应确保在整个Script中保持一致。例如,在一个Script或Script集中随意切换Cnt和Count将造成混乱。对象命名约定下表列出了VBScript中可能用到的对象命名约定(推荐):对象类型前缀示例3D面板pnlpnlGroup动画按钮anianiMailBox复选框chkchkReadOnly组合框、下拉列表框cbocboEnglish命令按钮cmdcmdExit公共对话框dlgdlgFileOpen框架frafraLangu
35、age水平滚动条hsbhsbVolume图像imgimgIcon标签lbllblHelpMessage直线linlinVertical列表框lstlstPolicyCodes旋钮spnspnPages文本框txttxtLastName垂直滚动条vsbvsbRate滑块sldsldScale代码注释约定所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述细节信息(如何实现功能),这是因为细节有时要频繁更改。这样就可以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及必要的内部注释来描述。当传递给过程的参数的用途不明显,或过程对参数的取值范围有要求时,应加以说明。如果过程改变了函数和变量的返回值(特别是通过参数引用来改变),也应在过程的开始部分描述该返回值。过程开始部分的注释应包含以下区段标题。相关样例,请参阅后面的“格式化代码”部分。区段标题注释内容目的过程的功能(不是实现功能的方法)。假设其状态影响此过程的外部变量、控件或其他元素的列表。效果过程对每个外部变量、控件或其他元素的影响效果的列表。输入每个目的不明显的参数的解释。每个参数都应占据单独一行并有其内部注释。返回返回值的解释。请记住以下几点: 每个重要的变量声明都应有内部注释,描述变量的用途。