VBScript 学习笔记

创建一个变量

VBScript 变量名称的规则:

  • 必须以字母开头
  • 不能包含点号(.)
  • 不能超过 255 个字符

在 VBScript 的缩写中,所有的变量都与类型 variant 相关,可存储不同类型的数据。

类型 variant

VBScript 常用的数据类型有三种:

Dim:

Dimension 的缩写,是你定义变量的保留关键字,同时也会给变量分配内存。在脚本级别用Dim定义的变量,在脚本内部所有的过程内都可调用;在单独过程内用Dim定义的变量,只有当前过程可以调用。

Public和Private:

Public,跟Dim完成的基本功能类似,也能定义变量分配内存。更类似于形容词,形容你定义的类别是公用的,可以形容Class,变量等等。它定义的东东,在所有的脚本和所有的过程内都可调用,范围比Dim大了许多。但是平时的使用,我们用Dim就完全能够解决问题了,所以Public的使用很少。

在 Class 块中,成员通过相应的声明语句被声明为 Private 或 Public。被声明为 Private 的将只在 Class 块内是可见的。被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的。没有使用 Private 或 Public 明确声明的被默认为 Public。

声明(创建)VBScript 变量

在 VBScript 创建变量通常指"声明"变量,而声明变量指的是定义变量,这与普通的计算机语言不同。

现在我们通过Dim语句声明 VBScript 变量。如下所示:

Dim x
Dim carname

我们也可以在脚本中通过使用它的名称来声明变量。如下所示:

carname = "Volvo"

但是这种创建变量的方法不是一个好习惯,因为可能会在脚本中拼错变量名,那样可能会在脚本运行时引起奇怪的结果。

如果您拼错变量名,比如 "carname" 变量错拼为 "carnime",脚本会自动创建一个名为 "carnime" 的新变量。为了防止脚本这样做,您可以使用 Option Explicit 语句。如果您使用这个语句,就必须使用 dim、public 或 private 语句来声明所有的变量。

Option Explicit 语句放置于脚本的顶端,如下所示:

Option Explicit
Dim carname
carname = some value

但这似乎也不是一个很好的方法,因为你必须在程序开始之前就考虑所有的变量,这几乎是不可能的。而且在程序开始之前,内存便将程序运行过程中所有的变量都一一分配,而很多时候根本只有很少的一部分代码块才会使用这些变量,这对于内存也是一种极大的浪费。所以靠程序员自身对于变量的掌握才是更重要的。

为变量赋值

您可以为某个变量赋值,如下所示:

carname="Volvo"
x=10

变量名是在表达式的左侧,需要赋给变量的值在表达式的右侧。现在变量 "carname" 的值是 "Volvo",变量 "x" 的值是 "10"。

变量的生存期

变量的生存期指的是它可以存在的时长。

当您在一个子程序中声明变量时,变量只能在此程序内进行访问。当退出此程序时,变量也会失效。这样的变量称为本地变量。您可以在不同的子程序中使用名称相同的本地变量,因为每个变量只能在声明它的程序内得到识别。

如果您在子程序以外声明了一个变量,在您的页面上的所有子程序都可以访问它。这类变量的生存期始于它们被声明,止于页面被关闭。

VBScript 数组变量

数组变量用于在一个单一的变量中存储多个值。

在下面的实例中,声明了一个包含 3 个元素的数组:

Dim names(2)

括号内显示的数字是 2。数组的下标以 0 开始,因此该数组包含 3 个元素。这是容量固定的数组。您可以为数组的每个元素分配数据,如下所示:

names(0)="Tove"
names(1)="Jani"
names(2)="Stale"

同样地,通过使用特定数组元素的下标号,可以取回任何元素的值。如下所示:

mother=names(0)

可以在一个数组中使用多达 60 个维数。声明多维数组的方法是在括号中用逗号来分隔数字。这里,我们声明了一个包含 5 行 7 列的 2 维数组:

Dim table(4,6)

创建一个VBScript 程序

VBScript 可使用两种程序:

  • 子程序
  • 函数程序

VBScript 子程序

子程序:

  • 是一系列的语句,被封装在 Sub 和 End Sub 语句内
  • 可执行某些操作,但不会返回
  • 可带有参数
Sub mysub()
some statements
End Sub

或者

Sub mysub(argument1,argument2)
some statements
End Sub

在 VBScript 中似乎将整个编写的程序认定为主程序,而类似于C语言中的主程序 main 则被认定与是子程序,一个程序只允许出现一个子程序。

VBScript 函数程序

函数程序

  • 是一系列的语句,被封装在 Function 和 End Function 语句内
  • 可执行某些操作,并会返回
  • 可带有通过程序调用来向其传递的参数。
  • 如果没有参数,必须带有空的圆括号 ()
  • 通过向函数程序名赋值的方式,可使其返回值
Function myfunction()
some statements
myfunction=some value
End Function

或者

Function myfunction(argument1,argument2)
*some statements*
myfunction=*some value*
End Function

函数程序则与其他大部分的语言一致,就是外部定义函数程序的意思。

调用程序

这个简单的函数程序被调用来计算两个参数的和:

Function myfunction(a,b)
myfunction=a+b
End Function 

document.write(myfunction(5,9))

函数 "myfunction" 将返回参数 "a" 和参数 "b" 的和。这里返回的是 14。

当您调用程序时,您可以使用 Call 语句,如下所示:

Call MyProc(argument)

或者,您可以省略 Call 语句,如下所示:

MyProc argument

Call 语句:

参数:

Call:可选项关键字。如果指定此关键字,则必须用括号把 argumentlist 括起来。例如:Call MyProc(0)

functionname:必选项。要调用的过程名。

argumentlist:可选项。传递给过程的变量、数组或表达式列表,用逗号分隔每一项。

说明:

在调用过程时,不必使用 Call 关键字。然而,如果使用 Call 关键字调用要求参数的过程,则必须用括号将 argumentlist 括起来。如果省略 Call 关键字,那么必须也同时省略 argumentlist 参数两边的括号。使用 Call 语法调用内部函数或使用用户自定义函数,函数返回值都会被放弃。

例:

Call MyFunction("Hello World")

Function MyFunction(text)   
MsgBox text
End Function

VBScript 条件语句

与其他计算机语言相同,VBScript 也有像对应的条件判断语句。在 VBScript 中,我们可以使用四种条件语句:

  • If 语句 - 假如您希望在条件为 true 时执行一系列的代码,可以使用这个语句
  • If...Then...Else 语句 - 假如您希望执行两套代码其中之一,可以使用这个语句
  • If...Then...ElseIf 语句 - 假如您希望选择多套代码之一来执行,可以使用这个语句
  • Select Case 语句 - 假如您希望选择多套代码之一来执行,可以使用这个语句

If

与一般计算机语言一致,当条件为 true 时,执行某段代码。

If i=10 Then alert("Hello")

当我们要执行的语句不止一条,而是一个语句块时,我们可以这样写。

If i=10 Then
alert("Hello")
i = i+1
End If

值得注意的是,由于 VBScript 并没有C语言的 { } 所以当使用语句时候请注意结束语句。

If...Then...Else

如果想要在条件为 true 时执行某条语句,并在条件不为 true 时执行另一条语句,就必须添加关键词 else

If i < 10 Then
document.write("Good morning!")
Else
document.write("Have a nice day!")

If...Then...ElseIf

这相当于C语言中的 if-else 的嵌套,在 VBScript 中我们一般才采用下面的方式。

If i = 10 Then
document.write("Just started...!")
ElseIf i = 11 Then
document.write("Hungry!")
ElseIf i = 12 Then
document.write("Ah, lunch-time!")
ElseIf i = 16 Then
document.write("Time to go home!")
Else
document.write("Unknown")
End If

Select Case

如果您想要像C语言中的 switch 选择多套代码之一来执行,可以使用 "Select Case" 语句:

Select Case d
Case 1
document.write("Sleepy Sunday")
Case 2
document.write("Monday again!")
Case 3
document.write("Just Tuesday!")
Case 4
document.write("Wednesday!")
Case 5
document.write("Thursday...")
Case 6
document.write("Finally Friday!")
Case else
document.write("Super Saturday!!!!")
End Select

VBScript 循环

循环语句用于运行相同的代码块指定的次数。在 VBScript 中,我们可以使用四种循环语句:

  • For...Next 语句 - 运行一段代码指定的次数
  • For Each...Next 语句 - 针对集合中的每个项目或者数组中的每个元素来运行某段代码
  • Do...Loop 语句 - 运行循环,当条件为 true 或者直到条件为 true 时
  • While...Wend 语句 - 不要使用这个语句 - 请使用 Do...Loop 语句代替它

For...Next 循环

For i=2 To 10 Step 2
some code
Next

通过 Step 关键词,您可以规定计数变量递增或递减的步进值。在上面的例子中每次递增的值为2.当然你也可以不写,没有 Step 时默认为1。

For i = 0 To 5
some code
Next

同时也可以使用类似于C语言 break 语句来跳出循环。

For i=1 To 10
If i=5 Then Exit For
some code
Next

For Each...Next 循环

For Each...Next 针对集合中的每个项目或者数组中的每个元素来重复运行某段代码。

当你的过程需要在一个集合的所有对象或者一个数组的所有元素之间循环时,应该使用 For Each...Next 循环。该循环不需要 计数器变量,VBScript 自己知道应该执行几次循环。我们拿工作表集合作个例子,要删除工作簿里面的工作表,你首先不得不要选择它,再选择“编辑”-“删除工作表”。如果要只留一个工作表在工作簿里面的话,你就不得不使用同样的命令,次数取决于工作表的总数。因为每个工作表都是工作表集合里的一个对象,所以使用 For Each…Next 循环来加速删除工作表。

Dim cars(2)							// 声明数组,并将其赋值
cars(0)="Volvo"
cars(1)="Saab"
cars(2)="BMW"

For Each 元素 In 组合
语句1
语句2
语句N
Next [元素]

Do...Loop 循环

如果你不知道重复多少次,可以使用 Do...Loop 语句。

Do...Loop 语句重复执行某段代码直到条件是 true 或条件变成 true。

重复执行代码直到条件是 true

您可以使用 While 关键字来检查 Do... Loop 语句的条件。

Do While i>10			// 先判断后运行代码
some code
Loop

如果 i 等于 9,上述循环内的代码将终止执行。

Do						// 先执行代码后判断
some code
Loop While i>10

这个循环内的代码将被执行至少一次,即使 i 小于 10。

重复执行代码直到条件变成 true

您可以使用 Until 关键字来检查 Do...Loop 语句的条件。

Do Until i=10
some code
Loop

如果 i 等于 10,上述循环内的代码将终止执行。

Do
some code
Loop Until i=10

这个循环内的代码将被执行至少一次,即使 i 等于 10。

退出 Do...Loop

您可以通过 Exit Do 关键词退出 Do...Loop 语句。

Do Until i=10
i=i-1
If i<10 Then Exit Do
Loop

这个循环内的代码,只要 i 不为 10 且 i 大于 10 时都将被执行。

posted @ 2019-01-16 11:12  JingWenxing  阅读(410)  评论(0编辑  收藏  举报