4. VBScript介绍
本章将提供一个对于VBScript(Microsoft Visual Basic的描述语言版本)的简短介绍给那些从来没有用过这种语言或是想要知道VBScript中特定语言结构(例如程序中的条件式If叙述)的使用者。
提示
Microsoft提供了〈VBScript程序语言参考〉和〈VBScript用户指南〉这两个有关VBScript详细信息的文件。随书光盘将他们放在\Docs\VBSDOC55文件夹中,但建议您可以从Microsoft的网站(h ttp://www.microsoft/taiwan/products/develop/scripting/default.htm)下载最新版的文件。
基本功能
本节将介绍VBScript的基本功能。在本章的后半段,还会介绍更进阶的功能(包括一些第5版指令引擎所提供的功能)。
叙述、连续的行、与批注
VBScript是VBA(Microsoft Visual Basic for Application)的子集合,而VBA又是由Microsoft Office和Visual Basic所提供的。Microsoft从VBA用了好几个语言结构来定义VBScript的语法。如果你有过Visual Basic或Office程序设计的经验,那么VBScript程序设计对您而言应该不困难。
叙述(Statements)
您必须使用VBScript定义的语法规则来输入叙述。下列这几行是有效的VBScript叙述:
Value1 = 10
Value1 = Value1 + 10
If Value1 > 100 Then Value1 = 100
Tax = 0.1 : Price = Net * Tax
您可以在单行中输入多个叙述,只要使用冒号(:)将他们分隔开来即可,例如上面程序代码中的最后一行所示。无论如何,您应该谨慎地使用这种语法以增加您程序的可读性。
说明
VBScript的叙述和关键词是不区分大小写的(case insen-sitive),但是在JScript中则是相反的。
连续的行(Continued Lines)
太长的叙述会让您的Script不易阅读。下面这行用来显示讯息盒的叙述就比目前编辑窗口的宽度还长:
WScript.Echo "您在之前窗体的文本框中输入的名字
是错误的,请重新输入!"
如果一个程序包含很多行冗长的叙述,那么您将浪费时间在调整垂直滚动轴来编辑这几行。比较好的方法是附加一个空格符和底线符号(_)在该行结束的地方,并在下一行继续此叙述。如下所示:
WScript.Echo "您在之前窗体的文本框 " & _
"中输入的名字是错误的," & _
"请重新输入!"
当语言引擎侦测到某一行是以底线符号结尾时,他会假设有一个连续的行并将下一行视为目前叙述的一部份。
说明
这些连续行之最末行的最后面不必加上底线符号。同时您也不能在包含底线符号的行后面加上批注。如果您想在连续的行中使用一个很长的字符串,请将这个字符串分为数个子字符串并分别以双引号结
尾。然后您便能够加入底线符号来分开这个叙述到好几行里面。您可以使用「&」操作数或「+」操作数来链接这些子字符串。在前面的叙述中曾使用了这种结构。
批注(Comments)
如同第1章曾提到过,若您想要告诉VBScript不要直译某一行或者是某个叙述的一部份,那么您只要把这个叙述标示成批注即可。在VBScript里面,您可以用单引号(')或REM叙述来标示批注。倘若VBScript直译器在叙述中侦测到这个字符,他将会忽略该行剩下的部分。下面这两行都是批注:
' 这一整行都是批注
Value1 = Net * Factor    '在行末批注
第二行叙述的后面有一个批注。VBScript会执行这个叙述并且忽略批注的部分。VBScript程序结构
一个VBScript的程序可以由批注和叙述所组成。本书中使用的Script档案采用程序4-1的结构。
程序4-1 W SHDemo.vbs
'************************************************
' 档案:WSHDemo.vbs (WSH sample in VBScript)
' 作者:(c) G. Born
'
' 使用WSH来显示简单的对话盒
'************************************************
Option Explicit
Dim Message
' 变数初始化
Message = "快点,程序执行了!"
WScript.Echo Message
'*** 程序结束
如同前面章节所提到,在您的Script中加入批注是很好的程序设计训练。若您从其他程序设计师那里得到一个Script,而该作者又有在文件头注明程序的目的和其他信息,那么您肯定会很感激这位作者。
说明
您还可以在HTML文件中使用VBScript程序,并以M icrosoft Internet Explorer 来执行他们。虽然I nternet Explorer 和Microsoft WSH(Windows Script Host)使用同一个语言引擎,但他们却不是使用相同的对象(或者更明确地说,是相同的对象模型)。举例来说,I nternet Explorer 提供的事件处理在WSH环境中就不能够使用。因此在文件头注明他的语言、版本和用来设计Script的环境将会是很有帮助的。
常数和变数
在VBScript里,您可以使用常数和变量来储存值。接下来的几个小节将讨论如何定义常数和变量。
常数(Contants)
您肯定会在您的Script中用到常数。您可以在VBScript叙述中直接使用他们。下面的程序代码定义了一个常数:
result = price + 100.0
这个方程式把变量price加上100.0,然后将结果指定给result变量。这个数值100.0就是一个常数。这种技巧是很普遍的,而且容易阅读。但是他有一个很大的缺点。我们假设您的Script有好几百行,而这个数值100.0在很多行都有出现。如果您必须把100.0改成110.0,此时会发生什么事呢?您必须在原始码中修改用到这个常数的每一行。您可以使用编辑器的寻/取代为... 功能,但是这样可能会花点时间而且可能会导致错误,因为数值100.0也许有不同的用途。
为了避免这个问题,您可以在VBScript程序的开头设定一个常数或标识符。这个用来取代数字和字符串的常数是一个有意义的名字,并且其值是不会改变的。您必须明确地宣告常数。在下面这几行程序代码中,我们用关键词Const来宣告常数。他的后面跟着常数的名称与其值:
Const profit = 100.0
您可以在VBScript程序的其他叙述中使用命名过的常数。如下所示:
Price = NetPrice * Amount + profit
命名过的常数的好处是您可以改变在宣告部分的常数值,而不必修改分布在原始码中的叙述。您也可以指定有意义的名称给一个数值,以简化程序的维护。
说明
visual basic pdf
不注意看的话,您可能会像在使用变量般的使用命名过的常数。但常数的值是无法由程序代码更动。因此,您只能够在指定叙述的右边使用他的名称。
您也可以将数个常数定义在同一行里:
Const VAT = 0.16, Profit = 10
不同于Visual Basic和VBA,VBScript只支持Variant数据型态。命名过的常数在预设情况下会被宣告为public。也就是说在Script开头宣告的常数在整个Script中都是有效的。如果您在程序(Procedure)中宣告了一个常数,那么他的有效范围仅限于该程序里。您可以使用public和Private关键词(将在本章后面介绍)来覆写(Overwrite)这个预设的有效范围。
提示
数值的常数通常是以10为底(十进制数)。然而,您也可以使用十六进制的常数,藉由使用「&Hxxx」的格式(其中xxxx指的是十六进制数值)。举例来说,「&H0C」这个值就等于十进制数的数字12。而文字的常数则必须以双引号围起来(例如"Hello, world")。至于时间和日期的常数则需要用井字号(#)围起来(例如#3/17/1980#)。
内建的常数
VBScript包含了数个预先定义过的常数(也就是所谓的内建常数),例如vbOKOnly。请看下面的叙述:
MsgBox "Hello", 0 + 64, "Test"
如果您使用命名过的常数,则这个叙述会比较具有可读性。
MsgBox "Hello", vbOKOnly + vbInformation, "Test"
如此一来,您唯一必须知道的只有这些内建常数的确切名称而已。
说明
所有的内建常数都条列于〈VBScript程序语言参考〉文件中。
变数(Variables)
变量是指到程序可以储存值的内存位置的代表名称。与常数不同的是,变量在程序执行的期间能够改变其值。您可以直接在程序中使用变量,如下所示:
Price = 45    ' 设定价格
Discount = 17
当变量第一次出现在程序执行时,VBScript会在内存中建立此变量并给定初值。VBScript只对变量提供Variant数据型态。也就是说您能够在变量中储存不同的值,他可以是数字或文字。
Variant的子型态
如同刚才所提过,VBScript只支持Variant数据型态─字符串、日期、布尔(True或False)、整数、浮点数等等。储存在Variant中的值的格式取决于这个值本身。如果您指定一个数字给Variant,那么他就会被储存为数字格式。同理,日期值会被储存为日期格式、文字会被储存为字符串格式等等。储存在Variant中的值的格式称为他的子型态(Variant Subtypes)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。