vbscript基础

一,概述

VBScript 与www浏览器集成在一起。开发者可以免费使用 VBScript 源(Microsoft 为 32 位 Windows® API、16 位 Windows API 和 Macintosh® 提供 VBscript 的二进制实现程序)实现程序。VBScript(Microsoft Visual Basic Scripting Edition)广泛应用于 Ms IE(客户端脚本)和 Ms IIS(服务器脚本)。它易学易用,和VB/VBA互通。

它使用 Windows 脚本与宿主应用程序对话。使用 Windows 脚本,浏览器和其他宿主应用程序不再需要每个脚本部件的特殊集成代码。Windows 脚本使宿主可以编译脚本、获取和调用入口点及管理开发者可用的命名空间。通过 Windows 脚本,语言厂商可以建立标准脚本运行时语言。Microsoft提供 VBScript的运行支持,并与其它组织协商定义 Windows 脚本标准以使脚本引擎可以互换。Windows 脚本可用在Ms IE和 Ms IIS中。VBScript 和 Windows 脚本也可以在其他应用程序中作为普通脚本语言使用。

二,基本语法规则

1,VBS的开始标记:VBS块可以出现在 HTML 页面的任何地方(BODY 或 HEAD 部分之中)。然而最好将所有的一般目标脚本代码放在 HEAD 部分中,以使所有脚本代码集中放置。这样可以确保在 BODY 部分调用代码之前所有脚本代码都被读取并解码。其它脚本代码尽量遵循[ASP的代码分离]的原则。

A:大多数脚本代码在 Sub 或 Function 过程中,仅在其他代码要调用它时执行:

<SCRIPT LANGUAGE="VBScript"      <!--'注释标记,避免不能识别<SCRIPT>的浏览器暴露代码。    VBS语句       -->'注释标记     </SCRIPT>       例:       <HTML>       <HEAD><TITLE>简单的首页</TITLE>       <SCRIPT LANGUAGE="VBScript"       <!--       Sub Button1_OnClick      MsgBox "Hello, world!"       End Sub       -->       </SCRIPT>       </HEAD>       <BODY>       <H3>简单的首页</H3><HR>       <FORM><INPUT NAME="Button1" TYPE="BUTTON" VALUE="单击此处"</FORM>       </BODY>       </HTML>

B:可在程与函数外如在窗体中嵌入脚本代码以响应窗体中按钮的单击事件。该代码仅在页面加载时执行一次。这样就实现客户端脚本一些功能(可在加载页面时初始化数据或动态改变外观等)

例一:代码直接加到控件标签中:

<INPUT NAME=“Button1” TYPE=“BUTTON” VALUE=“单击此处” OnClick='MsgBox “Mirabile visu.”'> '只要用冒号 (:) 分隔语句,就可以使用多条语句

例二:代码加到<script>标签中:

<FORM NAME="Form1"      <INPUT TYPE="Button" NAME="Button1" VALUE="单击"     <SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript"      MsgBox "按钮被单击!"     </SCRIPT>       </FORM>

2,数据类型

VBS只有一种特殊的数据类型Variant,根据最适用于其包含的数据信息类型(子类型)的方式进行操作。如用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。

子类型:Empty(0或者””) ,Null(不包含任何有效数据) ,Boolean,Byte,Integer,Currency,Long,Single,Double,Date (Time),String,Object,Error

3,变量:

显式声明变量: Dim 语句、Public 语句和 Private

隐式声明变量:是不良编程习惯,可用 Option Explicit 防止

变量的作用域由声明它的位置决定。如果在过程中声明变量,就是过程级变量,只有局部作用域,相当于临时存储空间,存活期仅是该过程运行的时间,变量随过程结束而消失。因此可在不同过程中使用同名的局部变量。如果在过程之外声明变量,则该变量可以被脚本中所有过程所识别,称为Script级变量,具有脚本级作用域。存活期从被声明的一刻起,直到脚本运行结束。

变量赋值:变量 = 要赋的值

数组变量(维数⇐60):相对单值的标量变量而言。

Dim aryArray(10) 定义大小11的数组

Dim aryMyArray() 动态定义数组,随后必须要有ReDim定义大小

ReDim aryAnotherArray() 动态定义数组

ReDim aryMyArray(25) 将动态数组初始大小设置为 25

ReDim Preserve aryMyArray(30)重调大小为30并保留数组原内容。

4,常量:

创建用户自定义常数并给它们赋原义值。例如:

字符串型常数:Const conMyString = “这是一个字符串。”

数值型常数:Const conMyAge = 49

日期时间文字:Const conCutoffDate = #6-1-97#

最好用con作常量前缀或将常量所有字母大写。以区别于变量。

5,运算符:按优先级顺序排列

算术运算符:求幂 ^ 负号 - 乘 * 除 / 整除 \ 求余 Mod 加 + 减 - 字符串连接 &

比较运算符:等于 = 不等于 <> 小于 < 大于 > 小于等于 ⇐ 大于等于 >= 对象引用比较 Is

逻辑运算符:逻辑非 Not 逻辑与 And 逻辑或 Or 逻辑异或 Xor 逻辑等价 Eqv 逻辑隐含 Imp

6,条件语句

A,If语句:通用判断

  If ... Then           ...         ElseIf ... Then     ...         ElseIf ... then      ...         Else     ...         End If

B,Case语句:用于同条件多结果判断

  Select Case...          Case " ... "           ...          Case " ... "           ...          Case Else           ...         End Select

7,循环语句:

A,Do…Loop: 当/直到 条件为True/False时循环。

  Do While/Until ...           ...           If...Then Exit Do '用于防止死循环       Loop (While/Until)

B,While…Wend: 当条件为 True 时循环。缺少灵活性。不建议使用。

C,For…Next: 指定循环次数,使用计数器重复运行语句。

  Dim j         For j = 2 To 10 Step 2           ...           If...Then Exit For '用于防止死循环等出错       Next

D,For Each…Next:对于集合中的每项或数组中的每个元素,重复执行一组语句。这在不知道集合中元素的数目时非常有用。

    Sub cmdChange_OnClick     Dimd'创建一个变量   Set d = CreateObject("Scripting.Dictionary")      d.Add "0", "Athens"'添加键和项目    d.Add "1", "Belgrade"     d.Add "2", "Cairo"         For Each I ind'I不用Dim定义    Document.frmForm.Elements(I).Value = D.Item(I)      Next       End Sub

8,过程:

A,定义:

Sub过程:不返回值。sub xxx()/(a,b,c)…end sub

Function过程:返回一个Variant值。function xxx()/(a,b,c)…end funciton

B,调用:

可用call xxx(a,b,c)调用,也可直接xxxx a,b,c

9, 自定义对象:

一个服务器脚本可以生成和使用对象,生成一个活动服务器组件的实例,对象是状态和操作的组合,状态由一套属性定义而操作则由一套方法定义。类( class )是你用来生成对象的模板, 由模板定义属性和方法。

A,定义对象:CreateObject 函数生成一个对象并返回一个该对象的引用, 格式如下:class是所生成对象的类

CreateObject( class )

B,使用对象:

格式为:application是应用程序的名字,而className是类的名字。

application.className

如果你要用Set语句把一个对象的引用赋给一个变量,格式为:VarName是含有对象引用的变量名。

Set VarName = CreateObject(Class)

三,Microsoft Visual Basic Scripting Edition编码规范

使用一致的编码规范可使脚本或脚本集的结构和编码样式标准化,而易于阅读和理解,更加直观且与其他语言约定保持一致。

对象、变量和过程的命名规则

注释约定

文本格式和缩进指南

1,常数命名规则

旧版本以变量形式实现常量,命名规范用:USER_LIST_MAX

新版本用Const语句创建真正的常数。命名规范用:大小写混合的格式,并以“con”作为常数名的前缀。例如:conYourOwnConstant

2,变量命名规则

为提高易读和一致性,请在 VBScript 代码中使用以下变量命名规则:

子类型

前缀

示例

Boolean

bln

blnFound

Byte

by

bytRasterData

Date(Time)

dtm

dtmStart

Double

dbl

dblTolerance

Error

err

errOrderNum

Integer

int

intQuantity

Long

lng

lngDistance

Object

obj

objCurrent

Single

sng

sngAverage

String

str

strFirstName

3,变量作用域前缀

变量应定义在尽量小的作用域中。在类型前缀前面添加一个单字符前缀可以实现快速区分变量的作用域,而不致使变量名过长。

作用域  前缀  示例

过程级  无   dblVelocity

Script级 s   sblnCalcInProgress

4,描述性变量名和过程名

变量名或过程名的主体应使用大小写混合格式,并且尽量完整地描述其目的。另外,过程名应以动词开始,例如 InitNameArray 或 CloseDialog。

对于经常使用的或较长的名称,推荐使用标准缩写以使名称保持在适当的长度内。通常多于 32 个字符的变量名会变得难以阅读。使用缩写时,应确保在整个脚本中保持一致。例如,在一个脚本或脚本集中随意切换 Cnt 和 Count 将造成混乱。

5,对象命名规则

下表列出了 VBScript 中可能用到的对象命名规则(推荐):

对象类型  前缀  示例   3D面板   pnl  pnlGroup   动画按钮  ani  aniMailBox   复选框   chk  chkReadOnly   组合框、   下拉列表框 cbo  cboEnglish   命令按钮  cmd  cmdExit   公共对话框 dlg  dlgFileOpen   框架    fra  fraLanguage   水平滚动条 hsb  hsbVolume   图像    img  imgIcon   标签    lbl  lblHelpMessage   直线    lin  linVertical   列表框   lst  lstPolicyCodes   旋钮    spn  spnPages   文本框   txt  txtLastName   垂直滚动条 vsb  vsbRate   滑块    sld  sldScale

6,代码注释约定

所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述细节信息(如何实现功能),这是因为细节有时要频繁更改。这样就可以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及必要的内部注释来描述。

当传递给过程的参数的用途不明显,或过程对参数的取值范围有要求时,应加以说明。如果过程改变了函数和变量的返回值(特别是通过参数引用来改变),也应在过程的开始部分描述该返回值。

过程开始部分的注释应包含以下区段标题。相关样例,请参阅后面的“格式化代码”部分。

区段标题 注释内容

目的 过程的功能(不是实现功能的方法)。

假设 其状态影响此过程的外部变量、控件或其他元素的列表。

效果 过程对每个外部变量、控件或其他元素的影响效果的列表。

输入 每个目的不明显的参数的解释。每个参数都应占据单独一行并有其内部注释。

返回 返回值的解释。

请记住以下几点:

每个重要的变量声明都应有内部注释,描述变量的用途。

应清楚地命名变量、控件和过程,仅在说明复杂细节时需要内部注释。

应在脚本的开始部分包含描述该脚本的概述,列举对象、过程、运算法则、对话框和其他系统从属物。有时一段描述运算法则的假码是很有用的。

7,格式化代码

应尽可能多地保留屏幕空间,但仍允许用代码格式反映逻辑结构和嵌套。以下为几点提示:

标准嵌套块应缩进 4 个空格。

过程的概述注释应缩进 1 个空格。

概述注释后的最高层语句应缩进 4 个空格,每一层嵌套块再缩进 4 个空格。

下列代码符合 VBScript 编码规范。

'********************************************************* ' 目的:在 UserList 数组中 ' 定位指定用户的首次出现。 ' 输入:strUserList():要搜索的用户列表。 ' strTargetUser:要搜索的用户名。 ' 返回:索引 strUserList 数组中 ' strTargetUser 的首次出现。 ' 如果找不到目标用户,则返回 -1。 '********************************************************* FunctionintFindUser (strUserList(), strTargetUser)  Dimi' Loop counter.DimblnFound' 找到目标标志intFindUser = -1   i = 0' 初始化循环计数器Do While i <= Ubound(strUserList) and NotblnFound  If strUserList(i) = strTargetUser Then   blnFound = True' 将标志设置为