- VBScript 教程
- VBScript - 首页
- VBScript - 概述
- VBScript - 语法
- VBScript - 启用
- VBScript - 位置
- VBScript - 变量
- VBScript - 常量
- VBScript - 运算符
- VBScript - 决策
- VBScript - 循环
- VBScript - 事件
- VBScript - Cookie
- VBScript - 数字
- VBScript - 字符串
- VBScript - 数组
- VBScript - 日期
- VBScript 高级
- VBScript - 过程
- VBScript - 对话框
- VBScript - 面向对象
- VBScript - 正则表达式
- VBScript - 错误处理
- VBScript - 其他语句
- VBScript 有用资源
- VBScript - 问答
- VBScript 快速指南
- VBScript - 有用资源
- VBScript - 讨论
VBScript 快速指南
VBScript - 概述
VBScript 代表Visual Basic Scripting,它是 Visual Basic for Applications (VBA) 的一个子集。VBA 是微软的产品,不仅包含在其他微软产品中,如 MS Project 和 MS Office,也包含在第三方工具中,如 AUTO CAD。
VBScript 的特性
VBScript 是一种轻量级的脚本语言,它具有极快的解释器。
VBScript 在大多数情况下不区分大小写。它具有非常简单的语法,易于学习和实现。
与 C++ 或 Java 不同,VBScript 是一种基于对象的脚本语言,而不是面向对象的编程语言。
它使用组件对象模型(COM)来访问其执行环境中的元素。
VBScript 只有在其宿主环境中执行时才能成功执行,例如 Internet Explorer (IE)、Internet Information Services (IIS) 和 Windows Scripting Host (WSH)
VBScript – 版本历史和用途
VBScript 最早由微软于 1996 年推出,其第一个版本是 1.0。当前稳定的 VBScript 版本是 5.8,它作为 IE8 或 Windows 7 的一部分提供。VBScript 的使用领域很多,并不限于以下列表。
VBScript 用作流行的自动化测试工具之一——Quick Test Professional(简称QTP)的脚本语言。
Windows Scripting Host,主要由 Windows 系统管理员用于自动化 Windows 桌面。
Active Server Pages (ASP),一个用于创建动态网页的服务器端脚本环境,它使用 VBScript 或 JavaScript。
VBScript 用于 Microsoft Internet Explorer 中的客户端脚本。
Microsoft Outlook 表单通常运行在 VBScript 上;但是,应用程序级编程依赖于 VBA(Outlook 2000 及以后版本)。
缺点
VBScript 仅被 IE 浏览器使用。其他浏览器,如 Chrome、Firefox,不支持 VBScript。因此,JavaScript 比 VBScript 更受欢迎。
VBScript 的命令行支持有限。
由于默认情况下没有可用的开发环境,因此调试很困难。
VBScript 的现状?
当前版本的 VBScript 是 5.8,随着最近 .NET framework 的发展,微软已决定在 ASP.NET 中为 Web 开发提供 VBScript 的未来支持。因此,将不会有更多的新版本的 VBScript 引擎,但所有缺陷修复和安全问题都由微软持续工程团队处理。但是,VBScript 引擎将默认作为所有 Microsoft Windows 和 IIS 的一部分提供。
VBScript - 语法
你的第一个 VBScript
让我们编写一个 VBScript 来打印“Hello World”。
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
document.write("Hello World!")
</script>
</body>
</html>
在上面的示例中,我们调用了一个函数 `document.write`,它将字符串写入 HTML 文档。此函数可用于写入文本、HTML 或两者。
Hello World!
空格和换行符
VBScript 忽略出现在 VBScript 程序中的空格、制表符和换行符。可以在程序中随意使用空格、制表符和换行符,因此可以自由地以整洁一致的方式格式化和缩进程序,使代码易于阅读和理解。
格式化
VBScript 基于微软的 Visual Basic。与 JavaScript 不同,它不使用分号等语句终止符来终止特定语句。
单行语法
当需要在单行中编写两行或多行 VBScript 时,使用冒号。因此,在 VBScript 中,冒号充当行分隔符。
<script language = "vbscript" type = "text/vbscript"> var1 = 10 : var2 = 20 </script>
多行语法
当 VBScript 中的语句很长,并且用户希望将其分成多行时,用户必须使用下划线“_”。这提高了代码的可读性。以下示例说明了如何使用多行。
<script language = "vbscript" type = "text/vbscript">
var1 = 10
var2 = 20
Sum = var1 + var2
document.write("The Sum of two numbers"&_"var1 and var2 is " & Sum)
</script>
保留字
以下列表显示了 VBScript 中的保留字。这些保留字不应作为常量、变量或任何其他标识符名称使用。
| Loop | LSet | Me |
| Mod | New | 下一页 |
| Not | Nothing | Null |
| On | Option | Optional |
| Or | ParamArray | Preserve |
| Private | Public | RaiseEvent |
| ReDim | Rem | Resume |
| RSet | Select | Set |
| Shared | Single | Static |
| Stop | Sub | Then |
| To | True | Type |
| And | As | Boolean |
| ByRef | Byte | ByVal |
| Call | Case | Class |
| Const | Currency | Debug |
| Dim | Do | Double |
| Each | Else | ElseIf |
| Empty | End | EndIf |
| Enum | Eqv | Event |
| Exit | False | For |
| Function | Get | GoTo |
| If | Imp | Implements |
| In | Integer | Is |
| Let | Like | Long |
| TypeOf | Until | Variant |
| Wend | While | With |
| Xor | Eval | Execute |
| Msgbox | Erase | ExecuteGlobal |
| Option Explicit | Randomize | SendKeys |
大小写敏感性
VBScript 是一种不区分大小写的语言。这意味着语言关键字、变量、函数名称和任何其他标识符不需要使用一致的大写字母来键入。因此,标识符 `int_counter`、`INT_Counter` 和 `INT_COUNTER` 在 VBScript 中具有相同的含义。
VBScript 中的注释
注释用于记录程序逻辑和用户信息,其他程序员将来可以无缝地处理相同的代码。它可以包含诸如“由谁开发”、“由谁修改”之类的信息,也可以包含合并的逻辑。解释器在执行时会忽略注释。VBScript 中的注释用两种方法表示。
1. 以单引号 (`) 开头的任何语句都被视为注释。
以下是一个例子:
<script language = "vbscript" type = "text/vbscript">
<!—
' This Script is invoked after successful login
' Written by : TutorialsPoint
' Return Value : True / False
//- >
</script>
2. 以关键字“REM”开头的任何语句。
以下是一个例子:
<script language = "vbscript" type = "text/vbscript">
<!—
REM This Script is written to Validate the Entered Input
REM Modified by : Tutorials point/user2
//- >
</script>
在浏览器中启用 VBScript
并非所有现代浏览器都支持 VBScript。只有微软的 Internet Explorer 支持 VBScript,而其他浏览器(Firefox 和 Chrome)只支持 JavaScript。因此,开发人员通常更喜欢 JavaScript 而不是 VBScript。
尽管 Internet Explorer (IE) 支持 VBScript,但您可能需要手动启用或禁用此功能。本教程将使您了解如何在 Internet Explorer 中启用和禁用 VBScript 支持的过程。
Internet Explorer 中的 VBScript
以下是关于如何在 Internet Explorer 中启用或禁用 VBScript 的简单步骤:
从菜单中选择“工具”→“Internet 选项”。
从对话框中选择“安全”选项卡。
单击“自定义级别”按钮。
向下滚动,直到找到“脚本”选项。
在“活动脚本”下选择“启用”单选按钮。
最后单击“确定”并退出。
要在 Internet Explorer 中禁用 VBScript 支持,您需要在活动脚本下选择禁用单选按钮。
VBScript - 位置
VBScript 在 HTML 文件中的位置
在 HTML 文档中的任何位置包含 VBScript 代码都具有灵活性。但在 HTML 文件中包含 VBScript 的最优方法如下:
在`
…`部分中的脚本。在`
…© . All rights reserved.`部分中的脚本。在`
…© . All rights reserved.`和`…`部分中的脚本。在外部文件中编写脚本,然后在`
…`部分中包含。
在下一节中,我们将看到如何以不同的方式放置 VBScript:
在`…`部分中的 VBScript
如果希望在某些事件(例如用户单击某个位置)上运行脚本,则将该脚本放在 head 部分中,如下所示:
<html>
<head>
<script type = "text/Vbscript">
<!--
Function sayHello()
Msgbox("Hello World")
End Function
//-->
</script>
</head>
<body>
<input type = "button" onclick = "sayHello()" value = "Say Hello" />
</body>
</html>
它将产生以下结果:一个名为 SayHello 的按钮。单击按钮后,将向用户显示一个包含消息“Hello World”的消息框。
在`…
© .
All rights reserved.
`部分中的 VBScript
如果需要在页面加载时运行脚本,以便脚本在页面中生成内容,则脚本位于文档的`
`部分。在这种情况下,不会使用 VBScript 定义任何函数:<html>
<head> </head>
<body>
<script type = "text/vbscript">
<!--
document.write("Hello World")
//-->
</script>
<p>This is web page body </p>
</body>
</html>
这将产生以下结果:
Hello World This is web page body
在``和``部分中的 VBScript
可以将 VBScript 代码同时放在`
`和``部分中,如下所示:<html>
<head>
<script type = "text/vbscript">
<!--
Function sayHello()
msgbox("Hello World")
End Function
//-->
</script>
</head>
<body>
<script type = "text/vbscript">
<!--
document.write("Hello World")
//-->
</script>
<input type = "button" onclick = "sayHello()" value = "Say Hello" />
</body>
</html>
它将产生以下结果:一条“Hello World”消息和一个“Say Hello”按钮。单击按钮后,将向用户显示一个包含消息“Hello World”的消息框。
Hello World
外部文件中的 VBScript
当开始更广泛地使用 VBScript 时,可能会发现某些情况下,在网站的多个页面上重复使用相同的 VBScript 代码。不必在多个 HTML 文件中维护相同的代码。
script标签提供了一种机制,允许您将 VBScript 存储在外部文件中,然后将其包含到 HTML 文件中。以下是一个示例,演示如何使用script标签及其src属性在 HTML 代码中包含外部 VBScript 文件:
<html>
<head>
<script type = "text/vbscript" src = "filename.vbs" ></script>
</head>
<body>
.......
</body>
</html>
要从外部文件源使用 VBScript,需要将所有 VBScript 源代码写入扩展名为“.vbs”的简单文本文件中,然后按上述方式包含该文件。例如,可以将以下内容保存在 filename.vbs 文件中,然后在包含 filename.vbs 文件后,在 HTML 文件中使用sayHello 函数。
Function sayHello() Msgbox "Hello World" End Function
QTP 中的 VBScript 位置
VBScript 位于 QTP(Quick Test Professional)工具中,但它**不**包含在 HTML 标记内。脚本文件保存为 .vbs 扩展名,并由 Quick Test Professional 执行引擎执行。
VBScript - 变量
VBScript 变量
变量是用于保存值的命名内存位置,该值可以在脚本执行期间更改。VBScript 只有一个基本数据类型,即**Variant**。
声明变量的规则:
变量名必须以字母开头。
变量名不能超过 255 个字符。
变量**不能**包含句点(.)。
变量名在声明的上下文中必须唯一。
声明变量
使用“dim”关键字声明变量。由于只有一个基本数据类型,因此所有声明的变量默认都是 Variant 类型。因此,用户**无需**在声明期间提及数据类型。
**示例 1** − 在此示例中,IntValue 可用作字符串、整数甚至数组。
Dim Var
**示例 2** − 两个或多个声明用逗号 (,) 分隔。
Dim Variable1,Variable2
为变量赋值
赋值类似于代数表达式。变量名位于左侧,后跟等于号 (=),然后是其右侧的值。
规则
数值应不带双引号声明。
字符串值应括在双引号 (" ") 中。
日期和时间变量应括在井号 (#) 中。
示例
' Below Example, The value 25 is assigned to the variable. Value1 = 25 ' A String Value ‘VBScript’ is assigned to the variable StrValue. StrValue = “VBScript” ' The date 01/01/2020 is assigned to the variable DToday. Date1 = #01/01/2020# ' A Specific Time Stamp is assigned to a variable in the below example. Time1 = #12:30:44 PM#
变量的作用域
可以使用以下语句声明变量,这些语句确定变量的作用域。变量的作用域在过程或类中使用时起着至关重要的作用。
- Dim
- Public
- Private
Dim
在过程级别使用“Dim”关键字声明的变量仅在同一过程中可用。在脚本级别使用“Dim”关键字声明的变量对同一脚本中的所有过程都可用。
**示例** − 在下面的示例中,Var1 和 Var2 在脚本级别声明,而 Var3 在过程级别声明。
**注意** − 本章的范围是了解变量。函数将在后续章节中详细介绍。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim Var1
Dim Var2
Call add()
Function add()
Var1 = 10
Var2 = 15
Dim Var3
Var3 = Var1 + Var2
Msgbox Var3 'Displays 25, the sum of two values.
End Function
Msgbox Var1 ' Displays 10 as Var1 is declared at Script level
Msgbox Var2 ' Displays 15 as Var2 is declared at Script level
Msgbox Var3 ' Var3 has No Scope outside the procedure. Prints Empty
</script>
</body>
</html>
Public
使用 "Public" 关键字声明的变量可用于所有关联脚本中的所有过程。声明 "public" 类型变量时,"Dim" 关键字将替换为 "Public"。
**示例** − 在以下示例中,Var1 和 Var2 在脚本级别可用,而 Var3 由于声明为 Public,因此可在关联的脚本和过程中使用。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim Var1
Dim Var2
Public Var3
Call add()
Function add()
Var1 = 10
Var2 = 15
Var3 = Var1+Var2
Msgbox Var3 'Displays 25, the sum of two values.
End Function
Msgbox Var1 ' Displays 10 as Var1 is declared at Script level
Msgbox Var2 ' Displays 15 as Var2 is declared at Script level
Msgbox Var3 ' Displays 25 as Var3 is declared as Public
</script>
</body>
</html>
Private
声明为 "Private" 的变量仅在其声明的脚本内具有作用域。声明 "Private" 类型变量时,"Dim" 关键字将替换为 "Private"。
**示例** − 在以下示例中,Var1 和 Var2 在脚本级别可用。Var3 声明为 Private,它仅对这个特定脚本可用。"Private" 变量的使用在类中更为突出。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim Var1
Dim Var2
Private Var3
Call add()
Function add()
Var1 = 10
Var2 = 15
Var3 = Var1+Var2
Msgbox Var3 'Displays the sum of two values.
End Function
Msgbox Var1 ' Displays 10 as Var1 is declared at Script level
Msgbox Var2 ' Displays 15 as Var2 is declared at Script level
Msgbox Var3 ' Displays 25 but Var3 is available only for this script.
</script>
</body>
</html>
VBScript - 常量
常量是用于保存值的命名内存位置,该值在脚本执行期间**不能**更改。如果用户尝试更改常量值,则脚本执行将导致错误。常量的声明方式与变量的声明方式相同。
声明常量
语法
[Public | Private] Const Constant_Name = Value
常量可以是 Public 或 Private 类型。使用 Public 或 Private 是可选的。Public 常量可用于所有脚本和过程,而 Private 常量可在过程或类中使用。可以为声明的常量分配任何值,例如数字、字符串或日期。
示例 1
在此示例中,pi 的值为 3.4,它在消息框中显示圆的面积。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim intRadius
intRadius = 20
const pi = 3.14
Area = pi*intRadius*intRadius
Msgbox Area
</script>
</body>
</html>
示例 2
以下示例说明如何为常量分配字符串和日期值。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Const myString = "VBScript"
Const myDate = #01/01/2050#
Msgbox myString
Msgbox myDate
</script>
</body>
</html>
示例 3
在下面的示例中,用户尝试更改常量值;因此,最终将出现**执行错误**。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim intRadius
intRadius = 20
const pi = 3.14
pi = pi*pi 'pi VALUE CANNOT BE CHANGED.THROWS ERROR'
Area = pi*intRadius*intRadius
Msgbox Area
</script>
</body>
</html>
VBScript - 运算符
什么是运算符?
让我们来看一个表达式 *4 + 5 等于 9*。这里,4 和 5 称为**操作数**,+ 称为**运算符**。VBScript 语言支持以下类型的运算符:
- 算术运算符
- 比较运算符
- 逻辑(或关系)运算符
- 连接运算符
算术运算符
VBScript 支持以下算术运算符:
假设变量 A 为 5,变量 B 为 10,则:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 将两个操作数相加 | A + B 将得到 15 |
| - | 从第一个操作数中减去第二个操作数 | A - B 将得到 -5 |
| * | 将两个操作数相乘 | A * B 将得到 50 |
| / | 将分子除以分母 | B / A 将得到 2 |
| % | 模运算符和整数除法后的余数 | B MOD A 将得到 0 |
| ^ | 指数运算符 | B ^ A 将得到 100000 |
要更好地理解这些运算符,您可以自己尝试一下。
比较运算符
VBScript 语言支持以下比较运算符:
假设变量 A 为 10,变量 B 为 20,则:
| 运算符 | 描述 | 示例 |
|---|---|---|
| = | 检查两个操作数的值是否相等,如果相等,则条件为真。 | (A == B) 为假。 |
| <> | 检查两个操作数的值是否相等,如果不相等,则条件为真。 | (A <> B) 为真。 |
| > | 检查左侧操作数的值是否大于右侧操作数的值,如果大于,则条件为真。 | (A > B) 为假。 |
| < | 检查左侧操作数的值是否小于右侧操作数的值,如果小于,则条件为真。 | (A < B) 为真。 |
| >= | 检查左侧操作数的值是否大于或等于右侧操作数的值,如果大于或等于,则条件为真。 | (A >= B) 为假。 |
| <= | 检查左侧操作数的值是否小于或等于右侧操作数的值,如果小于或等于,则条件为真。 | (A <= B) 为真。 |
要更好地理解这些运算符,您可以自己尝试一下。
逻辑运算符
VBScript 语言支持以下逻辑运算符:
假设变量 A 为 10,变量 B 为 0,则:
| 运算符 | 描述 | 示例 |
|---|---|---|
| AND | 称为逻辑 AND 运算符。如果两个条件都为真,则表达式为真。 | a<>0 AND b<>0 为假。 |
| OR | 称为逻辑 OR 运算符。如果两个条件中的任何一个为真,则条件为真。 | a<>0 OR b<>0 为真。 |
| NOT | 称为逻辑 NOT 运算符。它反转其操作数的逻辑状态。如果条件为真,则逻辑 NOT 运算符将使其为假。 | NOT(a<>0 OR b<>0) 为假。 |
| XOR | 称为逻辑异或。它是 NOT 和 OR 运算符的组合。如果只有一个表达式计算结果为真,则结果为真。 | (a<>0 XOR b<>0) 为真。 |
要更好地理解这些运算符,您可以自己尝试一下。
连接运算符
VBScript 语言支持以下连接运算符:
假设变量 A 为 5,变量 B 为 10,则:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 将两个值作为变量值相加(数值) | A + B 将得到 15 |
| & | 连接两个值 | A & B 将得到 510 |
假设变量 A = "Microsoft",变量 B="VBScript",则:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 连接两个值 | A + B 将得到 MicrosoftVBScript |
| & | 连接两个值 | A & B 将得到 MicrosoftVBScript |
**注意** − 连接运算符可用于数字和字符串。如果变量保存数值或字符串值,则输出取决于上下文。
要更好地理解这些运算符,您可以自己尝试一下。
VBScript - 决策
决策允许程序员控制脚本或其一部分的执行流程。执行由一个或多个条件语句控制。
以下是大多数编程语言中常见的典型决策结构的通用形式:
VBScript 提供以下类型的决策语句。
| 语句 | 描述 |
|---|---|
| if 语句 | if 语句由一个布尔表达式和一个或多个语句组成。 |
| if..else 语句 | if else 语句由一个布尔表达式和一个或多个语句组成。如果条件为真,则执行If 语句下的语句。如果条件为假,则执行脚本的Else 部分。 |
| if...elseif..else 语句 | 一个if 语句后跟一个或多个ElseIf 语句,这些语句由布尔表达式组成,然后后跟一个可选的 else 语句,当所有条件都为假时执行该语句。 |
| 嵌套 if 语句 | 另一个if 或elseif 语句中的if 或elseif 语句。 |
| switch 语句 | switch 语句允许测试变量与值列表的相等性。 |
VBScript - 循环
可能需要多次执行一段代码的情况。通常,语句按顺序执行:函数中的第一个语句首先执行,然后是第二个语句,依此类推。
编程语言提供各种控制结构,允许更复杂的执行路径。循环语句允许我们多次执行一个语句或一组语句,以下是 VBScript 中循环语句的一般形式。
VBScript 提供以下类型的循环来处理循环需求。单击以下链接以查看其详细信息。
| 循环类型 | 描述 |
|---|---|
| for 循环 | 多次执行一系列语句,并缩写管理循环变量的代码。 |
| for ..each 循环 | 如果组中至少有一个元素,则执行此循环,并为组中的每个元素重复。 |
| while..wend 循环 | 在执行循环体之前测试条件。 |
| do...while循环 | do...while语句会在条件为True时一直执行。(即)循环会一直重复,直到条件为False。 |
| do...until循环 | do...until语句会在条件为False时一直执行。(即)循环会一直重复,直到条件为True。 |
循环控制语句
循环控制语句会改变执行的正常顺序。当执行离开作用域时,循环中所有剩余语句将不会执行。
VBScript支持以下控制语句。点击以下链接查看详细信息。
| 控制语句 | 描述 |
|---|---|
| Exit For语句 | 终止For循环语句,并将执行转移到紧跟在循环之后的语句。 |
| Exit Do语句 | 终止Do While语句,并将执行转移到紧跟在循环之后的语句。 |
VBScript - 事件
什么是事件?
VBScript与HTML的交互是通过用户或浏览器操作页面时发生的事件来处理的。页面加载就是一个事件。用户点击按钮,点击也是一个事件。其他事件示例包括按下任何键、关闭窗口、调整窗口大小等。开发人员可以使用这些事件来执行VBScript编码的响应,从而导致按钮关闭窗口,向用户显示消息,验证数据,以及几乎可以想象到的任何其他类型的响应。
事件是文档对象模型 (DOM) 的一部分,每个HTML元素都有一组特定的事件,可以触发VBScript代码。请阅读本简短教程以更好地理解HTML事件参考。在这里,我们将看到一些例子来理解事件和VBScript之间的关系。
onclick事件类型
这是最常用的事件类型,当用户点击鼠标左键时发生。您可以针对此事件类型添加验证、警告等。
示例
<html>
<head>
<script language = "vbscript" type = "text/vbscript">
Function sayHello()
msgbox "Hello World"
End Function
</script>
</head>
<body>
<input type = "button" onclick = "sayHello()" value = "Say Hello"/>
</body>
</html>
它将产生以下结果,当您点击“Hello”按钮时,将发生onclick事件,这将触发sayHello()函数。
onsubmit事件类型
另一个最重要的事件类型是onsubmit。当您尝试提交表单时,将发生此事件。因此,您可以针对此事件类型添加表单验证。点击提交按钮提交表单后,将出现消息框。
点击提交按钮提交表单后,将出现消息框。
示例
<html>
<head> </head>
<body>
<script language = "VBScript">
Function fnSubmit()
Msgbox("Hello Tutorialspoint.Com")
End Function
</script>
<form action = "/cgi-bin/test.cgi" method = "post" name = "form1" onSubmit = "fnSubmit()">
<input name = "txt1" type = "text"><br>
<input name = "btnButton1" type = "submit" value="Submit">
</form>
</body>
</html>
onmouseover和onmouseout
这两个事件类型将帮助您为图像甚至文本创建不错的效果。当您将鼠标移到任何元素上时,将发生onmouseover事件;当您将鼠标从该元素移开时,将发生onmouseout事件。
示例
<html>
<head> </head>
<body>
<script language = "VBScript">
Function AlertMsg
Msgbox("ALERT !")
End Function
Function onmourse_over()
Msgbox("Onmouse Over")
End Function
Sub txt2_OnMouseOut()
Msgbox("Onmouse Out !!!")
End Sub
Sub btnButton_OnMouseOut()
Msgbox("onmouse out on Button !")
End Sub
</script>
<form action = "page.cgi" method = "post" name = "form1">
<input name = "txt1" type = "text" OnMouseOut = "AlertMsg()"><br>
<input name = "txt2" type = "text" OnMouseOver = "onmourse_over()">
<br><input name = "btnButton" type = "button" value = "Submit">
</form>
</body>
</html>
当您将鼠标悬停在文本框上以及当您将焦点从文本框和按钮移开时,它将产生结果。
HTML 4标准事件
此处列出了标准HTML 4事件以供参考。此处,“脚本”表示针对该事件执行的VBScript函数。
| Event | 值 | 描述 |
|---|---|---|
| onchange | 脚本 | 元素更改时运行脚本 |
| onsubmit | 脚本 | 提交表单时运行脚本 |
| onreset | 脚本 | 重置表单时运行脚本 |
| onblur | 脚本 | 元素失去焦点时运行脚本 |
| onfocus | 脚本 | 元素获得焦点时运行脚本 |
| onkeydown | 脚本 | 按下键时运行脚本 |
| onkeypress | 脚本 | 按下并释放键时运行脚本 |
| onkeyup | 脚本 | 释放键时运行脚本 |
| onclick | 脚本 | 鼠标点击时运行脚本 |
| ondblclick | 脚本 | 鼠标双击时运行脚本 |
| onmousedown | 脚本 | 按下鼠标按钮时运行脚本 |
| onmousemove | 脚本 | 鼠标指针移动时运行脚本 |
| onmouseout | 脚本 | 鼠标指针移出元素时运行脚本 |
| onmouseover | 脚本 | 鼠标指针移到元素上时运行脚本 |
| onmouseup | 脚本 | 释放鼠标按钮时运行脚本 |
VBScript和Cookie
什么是Cookie?
Web浏览器和服务器使用HTTP协议进行通信,而HTTP是无状态协议。但是对于商业网站,需要在不同页面之间维护会话信息。例如,一个用户注册完成后需要经过多个页面。但是如何跨所有网页维护用户的会话信息呢?在许多情况下,使用Cookie是记住和跟踪偏好、购买、佣金以及其他需要改善访问者体验或网站统计信息的信息的最有效方法。
它是如何工作的?
您的服务器以Cookie的形式向访问者的浏览器发送一些数据。浏览器可能会接受Cookie。如果接受,它将作为纯文本记录存储在访问者的硬盘上。现在,当访问者到达您网站上的另一个页面时,浏览器会将相同的Cookie发送到服务器以进行检索。检索后,您的服务器就会知道/记住之前存储的内容。Cookie是5个变长字段的纯文本数据记录:
Expires − Cookie到期的日期。如果为空,则Cookie将在访问者退出浏览器时过期。
Domain − 您网站的域名。
Path − 设置Cookie的目录或网页的路径。如果您想从任何目录或页面检索Cookie,则可以为空。
Secure − 如果此字段包含“secure”一词,则只能使用安全服务器检索Cookie。如果此字段为空,则不存在此类限制。
Name=Value − Cookie以键值对的形式设置和检索。
Cookie最初是为CGI编程设计的,Cookie的数据会在Web浏览器和Web服务器之间自动传输,因此服务器上的CGI脚本可以读取和写入客户端存储的Cookie值。
VBScript还可以使用Document对象的cookie属性来操作Cookie。VBScript可以读取、创建、修改和删除适用于当前网页的Cookie。
存储Cookie
创建Cookie的最简单方法是将字符串值赋给document.cookie对象,如下所示:
语法
document.cookie = "key1 = value1;key2 = value2;expires = date"
这里的expires属性是可选的。如果您使用有效的日期或时间提供此属性,则Cookie将在给定的日期或时间过期,之后将无法访问Cookie的值。
示例
以下是如何在input Cookie中设置客户名称的示例。
<html>
<head>
<script type = "text/vbscript">
Function WriteCookie
If document.myform.customer.value = "" Then
msgbox "Enter some value!"
Else
cookievalue = (document.myform.customer.value)
document.cookie = "name = " + cookievalue
msgbox "Setting Cookies : " & "name = " & cookievalue
End If
End Function
</script>
</head>
<body>
<form name = "myform" action = "">
Enter name: <input type = "text" name = "customer"/>
<input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
</form>
</body>
</html>
它将产生以下结果。现在在文本框中输入内容,然后按“设置Cookie”按钮来设置Cookie。
现在,您的系统有一个名为name的Cookie。您可以使用多个以逗号分隔的key = value对设置多个Cookie。您将在下一节学习如何读取此Cookie。
读取Cookie
读取Cookie与写入Cookie一样简单,因为document.cookie对象的值就是Cookie。因此,您可以随时使用此字符串来访问Cookie。document.cookie字符串将保留以分号分隔的name = value对列表,其中name是Cookie的名称,value是其字符串值。您可以使用字符串的split()函数将字符串分解为键和值,如下所示:
示例
以下是如何获取上一节中设置的Cookie的示例:
<html>
<head>
<script type = "text/vbscript">
Function ReadCookie
allcookies = document.cookie
msgbox "All Cookies : " + allcookies
cookiearray = split(allcookies,";")
For i = 0 to ubound(cookiearray)
Name = Split(cookiearray(i),"=")
Msgbox "Key is : " + Name(0) + " and Value is : " + Name(1)
Next
End Function
</script>
</head>
<body>
<form name = "myform" action = "">
<input type = "button" value = "Get Cookie" onclick = "ReadCookie()"/>
</form>
</body>
</html>
注意 − 这里,UBound是Array类的⼀个方法,它返回数组的长度。我们将在单独的章节中讨论数组;在此之前,请尝试理解它。
它将产生以下结果。现在,按“获取Cookie”按钮查看您在上⼀节中设置的Cookie。
注意 − 您的机器上可能已经设置了其他一些Cookie。因此,以上代码将向您显示在您的机器上设置的所有Cookie。
设置Cookie过期日期
您可以通过设置过期日期并在Cookie中保存过期日期,来将Cookie的生存期延长到当前浏览器会话之外。这可以通过将expires属性设置为日期和时间来完成。
示例
以下示例说明如何设置1个月后的Cookie过期日期:
<html>
<head>
<script type = "text/vbscript">
Function WriteCookie()
x = now()
y = dateadd("m",1,now()) ' Making it to expire next
cookievalue = document.myform.customer.value
document.cookie = "name = " & cookievalue
document.cookie = "expires = " & y
msgbox("Setting Cookies : " & "name=" & cookievalue )
End Function
</script>
</head>
<body>
<form name = "myform" action = "">
Enter name: <input type = "text" name = "customer"/>
<input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
</form>
</body>
</html>
删除Cookie
有时,您可能想要删除Cookie,以便后续尝试读取Cookie 时返回空值。为此,您只需要将过期日期设置为过去的时间即可。
示例
以下示例说明如何通过将Cookie的过期日期设置为过去1个月来删除Cookie:
<html>
<head>
<script type = "text/vbscript">
Function WriteCookie()
x = now()
x = now()
a = Month(x)-1
b = day(x)
c = year(x)
d = DateSerial(c,a,b)
e = hour(x)
msgbox e
f = minute(x)
msgbox f
d = cdate(d & " " & e & ":" & f)
msgbox d
cookievalue = document.myform.customer.value
document.cookie = "name = " & cookievalue
document.cookie = "expires = " & d
msgbox("Setting Cookies : " & "name=" & cookievalue )
End Function
</script>
</head>
<body>
<form name = "myform" action = "">
Enter name: <input type = "text" name = "customer"/>
<input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
</form>
</body>
</html>
VBScript - 数字
数字函数帮助开发人员以有效的方式处理数字,并帮助他们转换其子类型。它还有助于他们使用与VBScript关联的内置数学函数。
数字转换函数
数字函数帮助我们将给定的数字从一种数据子类型转换为另一种数据子类型。
| 序号 | 函数和描述 |
|---|---|
| 1 | CDbl 一个函数,它将任何变体子类型的给定数字转换为双精度型。 |
| 2 | CInt 一个函数,它将任何变体子类型的给定数字转换为整数。 |
| 3 | CLng 一个函数,它将任何变体子类型的给定数字转换为长整型。 |
| 4 | CSng 一个函数,它将任何变体子类型的给定数字转换为单精度型。 |
| 5 | Hex 一个函数,它将任何变体子类型的给定数字转换为十六进制。 |
数字格式化函数
数字格式化函数帮助开发人员以他们希望的格式表达给定的数字。
| 序号 | 函数和描述 |
|---|---|
| 1 | FormatNumber 一个函数,它将返回格式化为数字的表达式。 |
| 2 | FormatPercent 一个函数,它将返回格式化为百分比的表达式。 |
数学函数
数学函数帮助我们计算给定输入数字的数学和三角函数。
| 序号 | 函数和描述 |
|---|---|
| 1 | Int 一个函数,它返回给定数字的整数部分。 |
| 2 | Fix 一个函数,它返回给定数字的整数部分。 |
| 3 | Log 一个函数,它返回给定数字的自然对数。不允许负数。 |
| 4 | Oct 一个函数,它返回给定数字的八进制值。 |
| 5 | Hex 一个函数,它返回给定数字的十六进制值。 |
| 6 | Rnd 一个函数,它返回0到1之间的随机数。 |
| 7 | Sgn 一个函数,它返回与指定数字的符号对应的数字。 |
| 8 | Sqr 一个函数,它返回给定数字的平方根。不允许负数。 |
| 9 | Abs 一个函数,返回给定数字的绝对值。 |
| 10 | Exp 一个函数,返回e的指定次幂的值。 |
| 11 | Sin 一个函数,返回给定数字的正弦值。 |
| 12 | Cos 一个函数,返回给定数字的余弦值。 |
| 13 | Tan 一个函数,返回给定数字的正切值。 |
VBScript - 字符串
字符串是由字符组成的序列,可以包含字母、数字、特殊字符或所有这些字符的组合。如果一个变量用双引号 " " 括起来,则该变量被称为字符串。
语法
variablename = "string"
示例
str1 = "string" ' Only Alphabets str2 = "132.45" ' Only Numbers str3 = "!@#$;*" ' Only Special Characters Str4 = "Asc23@#" ' Has all the above
字符串函数
VBScript 提供预定义的字符串函数,帮助开发者更有效地处理字符串。以下是VBScript支持的字符串方法。请点击每个方法以了解详细信息。
| 函数名称 | 描述 |
|---|---|
| InStr | 返回指定子字符串的第一次出现位置。搜索从左到右进行。 |
| InstrRev | 返回指定子字符串的第一次出现位置。搜索从右到左进行。 |
| Lcase | 返回指定字符串的小写形式。 |
| Ucase | 返回指定字符串的大写形式。 |
| Left | 返回字符串左侧指定数量的字符。 |
| Right | 返回字符串右侧指定数量的字符。 |
| Mid | 根据指定的参数返回字符串中指定数量的字符。 |
| Ltrim | 返回去除指定字符串左侧空格后的字符串。 |
| Rtrim | 返回去除指定字符串右侧空格后的字符串。 |
| Trim | 返回去除前后空格后的字符串值。 |
| Len | 返回给定字符串的长度。 |
| Replace | 用另一个字符串替换字符串后返回的字符串。 |
| Space | 用指定数量的空格填充字符串。 |
| StrComp | 比较两个指定的字符串后返回一个整数值。 |
| String | 返回一个字符串,其中包含指定字符,重复指定次数。 |
| StrReverse | 反转给定字符串字符顺序后返回的字符串。 |
VBScript - 数组
什么是数组?
我们非常清楚,变量是用于存储值的容器。有时,开发人员需要一次在一个变量中保存多个值。当一系列值存储在一个变量中时,它被称为**数组变量**。
数组声明
数组的声明方式与变量的声明方式相同,只是数组变量的声明使用括号。在下面的示例中,数组的大小在括号中指定。
'Method 1 : Using Dim
Dim arr1() 'Without Size
'Method 2 : Mentioning the Size
Dim arr2(5) 'Declared with size of 5
'Method 3 : using 'Array' Parameter
Dim arr3
arr3 = Array("apple","Orange","Grapes")
虽然数组大小指定为5,但它可以容纳6个值,因为数组索引从零开始。
数组索引不能为负数。
VBScript数组可以存储任何类型的变量。因此,一个数组可以在单个数组变量中存储整数、字符串或字符。
为数组赋值
通过为每个要赋值的值指定数组索引值来为数组赋值。它可以是字符串。
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim arr(5)
arr(0) = "1" 'Number as String
arr(1) = "VBScript" 'String
arr(2) = 100 'Number
arr(3) = 2.45 'Decimal Number
arr(4) = #10/07/2013# 'Date
arr(5) = #12.45 PM# 'Time
document.write("Value stored in Array index 0 : " & arr(0) & "<br />")
document.write("Value stored in Array index 1 : " & arr(1) & "<br />")
document.write("Value stored in Array index 2 : " & arr(2) & "<br />")
document.write("Value stored in Array index 3 : " & arr(3) & "<br />")
document.write("Value stored in Array index 4 : " & arr(4) & "<br />")
document.write("Value stored in Array index 5 : " & arr(5) & "<br />")
</script>
</body>
</html>
当以上代码保存为.HTML并在Internet Explorer中执行时,会产生以下结果:
Value stored in Array index 0 : 1 Value stored in Array index 1 : VBScript Value stored in Array index 2 : 100 Value stored in Array index 3 : 2.45 Value stored in Array index 4 : 7/10/2013 Value stored in Array index 5 : 12:45:00 PM
多维数组
数组不限于一维,最多可以有60维。二维数组是最常用的数组。
示例
在下面的示例中,声明了一个具有3行4列的多维数组。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim arr(2,3) ' Which has 3 rows and 4 columns
arr(0,0) = "Apple"
arr(0,1) = "Orange"
arr(0,2) = "Grapes"
arr(0,3) = "pineapple"
arr(1,0) = "cucumber"
arr(1,1) = "beans"
arr(1,2) = "carrot"
arr(1,3) = "tomato"
arr(2,0) = "potato"
arr(2,1) = "sandwitch"
arr(2,2) = "coffee"
arr(2,3) = "nuts"
document.write("Value in Array index 0,1 : " & arr(0,1) & "<br />")
document.write("Value in Array index 2,2 : " & arr(2,2) & "<br />")
</script>
</body>
</html>
当以上代码保存为.HTML并在Internet Explorer中执行时,会产生以下结果:
Value stored in Array index : 0 , 1 : Orange Value stored in Array index : 2 , 2 : coffee
Redim语句
ReDim语句用于声明动态数组变量并分配或重新分配存储空间。
ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
**Preserve** - 一个可选参数,用于在更改最后一维的大小是保留现有数组中的数据。
**varname** - 一个必需参数,表示变量的名称,应遵循标准变量命名约定。
**subscripts** - 一个必需参数,表示数组的大小。
示例
在下面的示例中,一个数组被重新定义,然后在更改数组的现有大小时保留值。
**注意** - 将数组大小调整为小于其原始大小,则将丢失已删除元素中的数据。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim a()
i = 0
redim a(5)
a(0) = "XYZ"
a(1) = 41.25
a(2) = 22
REDIM PRESERVE a(7)
For i = 3 to 7
a(i) = i
Next
'to Fetch the output
For i = 0 to ubound(a)
Msgbox a(i)
Next
</script>
</body>
</html>
当我们将以上脚本保存为HTML并在Internet Explorer中执行时,会产生以下结果。
XYZ 41.25 22 3 4 5 6 7
数组方法
VBScript中有一些内置函数可以帮助开发人员有效地处理数组。以下是与数组一起使用的所有方法。请点击方法名称以了解详细信息。
| Function | 描述 |
|---|---|
| LBound | 一个函数,返回一个整数,该整数对应于给定数组的最小下标。 |
| UBound | 一个函数,返回一个整数,该整数对应于给定数组的最大下标。 |
| Split | 一个函数,返回一个包含指定数量值的数组。基于分隔符进行分割。 |
| Join | 一个函数,返回一个字符串,该字符串包含数组中指定数量的子字符串。这是Split方法的完全相反的函数。 |
| Filter | 一个函数,返回一个基于零的数组,该数组包含基于特定筛选条件的字符串数组的子集。 |
| IsArray | 一个函数,返回一个布尔值,指示输入变量是否为数组。 |
| Erase | 一个函数,回收数组变量的已分配内存。 |
VBScript - 日期和时间函数
VBScript日期和时间函数帮助开发人员将日期和时间从一种格式转换为另一种格式,或者以适合特定条件的格式表达日期或时间值。
日期函数
| Function | 描述 |
|---|---|
| Date | 一个函数,返回当前系统日期。 |
| CDate | 一个函数,将给定的输入转换为日期。 |
| DateAdd | 一个函数,返回添加指定时间间隔后的日期。 |
| DateDiff | 一个函数,返回两个时间段之间的差值。 |
| DatePart | 一个函数,返回给定输入日期值的指定部分。 |
| DateSerial | 一个函数,返回给定年份、月份和日期的有效日期。 |
| FormatDateTime | 一个函数,根据提供的参数格式化日期。 |
| IsDate | 一个函数,返回一个布尔值,指示提供的参数是否为日期。 |
| Day | 一个函数,返回一个介于1到31之间的整数,表示指定日期的天。 |
| Month | 一个函数,返回一个介于1到12之间的整数,表示指定日期的月份。 |
| Year | 一个函数,返回一个整数,表示指定日期的年份。 |
| MonthName | 一个函数,返回指定日期的月份名称。 |
| WeekDay | 一个函数,返回一个整数(1到7),表示指定日期的星期几。 |
| WeekDayName | 一个函数,返回指定日期的星期几名称。 |
时间函数
| Function | 描述 |
|---|---|
| Now | 一个函数,返回当前系统日期和时间。 |
| Hour | 一个函数,返回一个介于0到23之间的整数,表示给定时间的时部分。 |
| Minute | 一个函数,返回一个介于0到59之间的整数,表示给定时间的分钟部分。 |
| Second | 一个函数,返回一个介于0到59之间的整数,表示给定时间的秒部分。 |
| Time | 一个函数,返回当前系统时间。 |
| Timer | 一个函数,返回从上午12:00开始的秒数和毫秒数。 |
| TimeSerial | 一个函数,返回特定输入的小时、分钟和秒的时间。 |
| TimeValue | 一个函数,将输入字符串转换为时间格式。 |
VBScript - 过程
什么是函数?
函数是一组可重用的代码,可以在程序中的任何地方调用。这样就无需一遍遍地编写相同的代码。这将使程序员能够将大型程序分解成许多小的、易于管理的函数。除了内置函数外,VBScript还允许我们编写用户定义的函数。本节将解释如何在VBScript中编写自己的函数。
函数定义
在使用函数之前,我们需要定义该函数。在VBScript中定义函数最常见的方法是使用Function关键字,后跟唯一的函数名,它可能包含或不包含参数列表和一个带有**End Function**关键字的语句,该语句表示函数的结束。
基本的语法如下:
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function Functionname(parameter-list)
statement 1
statement 2
statement 3
.......
statement n
End Function
</script>
</body>
</html>
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function sayHello()
msgbox("Hello there")
End Function
</script>
</body>
</html>
调用函数
要在脚本后面的某个位置调用函数,只需使用**Call**关键字编写该函数的名称。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function sayHello()
msgbox("Hello there")
End Function
Call sayHello()
</script>
</body>
</html>
函数参数
到目前为止,我们已经看到了没有参数的函数,但是调用函数时可以传递不同的参数。这些传递的参数可以在函数内部捕获,并且可以对这些参数进行任何操作。函数使用**Call**关键字调用。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function sayHello(name, age)
msgbox( name & " is " & age & " years old.")
End Function
Call sayHello("Tutorials point", 7)
</script>
</body>
</html>
从函数返回值
VBScript函数可以有一个可选的return语句。如果您想从函数返回值,则需要此语句。例如,您可以将两个数字传递给函数,然后您可以期望函数在调用程序中返回它们的乘积。
**注意** - 函数可以返回多个以逗号分隔的值,作为分配给函数名本身的数组。
示例
此函数采用两个参数并将它们连接起来,并在调用程序中返回结果。在VBScript中,值使用函数名从函数返回。如果您想返回两个或更多值,则函数名将与一个值数组一起返回。在调用程序中,结果存储在result变量中。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function concatenate(first, last)
Dim full
full = first & last
concatenate = full 'Returning the result to the function name itself
End Function
</script>
</body>
</html>
现在,我们可以如下调用此函数:
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Function concatenate(first, last)
Dim full
full = first & last
concatenate = full 'Returning the result to the function name itself
End Function
' Here is the usage of returning value from function.
dim result
result = concatenate("Zara", "Ali")
msgbox(result)
</script>
</body>
</html>
子过程
子过程类似于函数,但有一些区别。
子过程不返回值,而函数可能返回或不返回值。
子过程可以不使用Call关键字调用。
子过程始终包含在**Sub**和**End Sub**语句中。
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Sub sayHello()
msgbox("Hello there")
End Sub
</script>
</body>
</html>
调用过程
要在脚本后面的某个位置调用过程,只需使用或不使用**Call**关键字编写该过程的名称。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Sub sayHello()
msgbox("Hello there")
End Sub
sayHello()
</script>
</body>
</html>
函数的高级概念
关于VBScript函数还有很多东西需要学习。我们可以按值或按引用传递参数。请点击每个参数以了解更多信息。
VBScript - 对话框
什么是对话框?
VBScript允许开发人员有效地与用户交互。它可以是用于向用户显示消息的消息框,也可以是用户可以输入值的输入框。
VBScript MsgBox函数
MsgBox函数显示一个消息框,并等待用户单击一个按钮,然后根据用户单击的按钮执行操作。
语法
MsgBox(prompt[,buttons][,title][,helpfile,context])
参数描述
Prompt − 必需参数。在对话框中显示的消息字符串。提示的最大长度约为 1024 个字符。如果消息超过一行,则可以使用回车符 (Chr(13)) 或换行符 (Chr(10)) 在各行之间进行分隔。
buttons − 可选参数。一个数值表达式,用于指定要显示的按钮类型、使用的图标样式、默认按钮的标识以及消息框的模式。如果留空,buttons 的默认值为 0。
Title − 可选参数。在对话框标题栏中显示的字符串表达式。如果标题留空,则应用程序名称将放置在标题栏中。
helpfile − 可选参数。一个字符串表达式,用于标识要用于提供对话框上下文相关帮助的帮助文件。
context − 可选参数。一个数值表达式,用于标识帮助作者分配给相应帮助主题的帮助上下文编号。如果提供了 context,则也必须提供 helpfile。
Buttons 参数可以取以下任何值:
0 vbOKOnly 只显示“确定”按钮。
1 vbOKCancel 显示“确定”和“取消”按钮。
2 vbAbortRetryIgnore 显示“中止”、“重试”和“忽略”按钮。
3 vbYesNoCancel 显示“是”、“否”和“取消”按钮。
4 vbYesNo 显示“是”和“否”按钮。
5 vbRetryCancel 显示“重试”和“取消”按钮。
16 vbCritical 显示严重错误消息图标。
32 vbQuestion 显示警告查询图标。
48 vbExclamation 显示警告消息图标。
64 vbInformation 显示信息消息图标。
0 vbDefaultButton1 第一个按钮为默认按钮。
256 vbDefaultButton2 第二个按钮为默认按钮。
512 vbDefaultButton3 第三个按钮为默认按钮。
768 vbDefaultButton4 第四个按钮为默认按钮。
0 vbApplicationModal 应用程序模式。在用户响应消息框之前,当前应用程序将无法工作。
4096 vbSystemModal 系统模式。在用户响应消息框之前,所有应用程序都将无法工作。
上述值在逻辑上分为四组:第一组 (0 到 5) 指示要在消息框中显示的按钮;第二组 (16、32、48、64) 描述要显示的图标的样式;第三组 (0、256、512、768) 指示哪个按钮必须为默认按钮;第四组 (0、4096) 确定消息框的模式。
返回值
MsgBox 函数可以返回以下值之一:
1 - vbOK - 单击了“确定”
2 - vbCancel - 单击了“取消”
3 - vbAbort - 单击了“中止”
4 - vbRetry - 单击了“重试”
5 - vbIgnore - 单击了“忽略”
6 - vbYes - 单击了“是”
7 - vbNo - 单击了“否”
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
'Message Box with just prompt message
MsgBox("Welcome")
'Message Box with title, yes no and cancel Butttons
a = MsgBox("Do you like blue color?",3,"Choose options")
' Assume that you press No Button
document.write("The Value of a is " & a)
</script>
</body>
</html>
执行上述脚本时,将显示消息框,如果单击“否”按钮,则 a 的值为 7。
The Value of a is 7
VBScript InputBox 函数
InputBox 函数帮助用户从用户处获取值。输入值后,如果用户单击“确定”按钮或按键盘上的 ENTER 键,InputBox 函数将返回文本框中的文本。如果用户单击“取消”按钮,则函数将返回空字符串 ("")。
语法
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
参数描述
Prompt − 必需参数。在对话框中显示的消息字符串。提示的最大长度约为 1024 个字符。如果消息超过一行,则可以使用回车符 (Chr(13)) 或换行符 (Chr(10)) 在各行之间进行分隔。
Title − 可选参数。在对话框标题栏中显示的字符串表达式。如果标题留空,则应用程序名称将放置在标题栏中。
Default − 可选参数。用户希望显示在文本框中的默认文本。
XPos − 可选参数。X 轴的位置,表示提示距屏幕左侧的水平距离。如果留空,则输入框水平居中。
YPos − 可选参数。Y 轴的位置,表示提示距屏幕左侧的垂直距离。如果留空,则输入框垂直居中。
helpfile − 可选参数。一个字符串表达式,用于标识要用于提供对话框上下文相关帮助的帮助文件。
context − 可选参数。一个数值表达式,用于标识帮助作者分配给相应帮助主题的帮助上下文编号。如果提供了 context,则也必须提供 helpfile。
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
' Input Box with only Prompt
InputBox("Enter a number")
' Input Box with a Title
a = InputBox("Enter a Number","Enter Value")
msgbox a
' Input Box with a Prompt,Title and Default value
a = InputBox("Enter a Number","Enter Value",123)
msgbox a
' Input Box with a Prompt,Title,Default and XPos
a = InputBox("Enter your name","Enter Value",123,700)
msgbox a
' Input Box with a Prompt,Title and Default and YPos
a = InputBox("Enter your name","Enter Value",123,,500)
msgbox a
</script>
</body>
</html>
执行上述脚本时,将显示输入框并显示用户输入的值。
面向对象的 VBScript
什么是对象
VBScript 运行时对象帮助我们完成各种任务。本节将帮助您了解如何实例化对象并使用它。
语法
为了无缝地使用对象,我们需要使用Set关键字声明对象并实例化它。
Dim objectname 'Declare the object name Set objectname = CreateObject(object_type)
示例
在下面的示例中,我们正在创建一个类型为Scripting.Dictionary的对象。
Dim obj
Set obj = CreateObject("Scripting.Dictionary")
销毁对象
销毁对象的意义在于释放内存并重置对象变量。
语法
为了销毁对象,我们需要使用Set关键字,后跟对象名称,并将其指向Nothing。
Set objectname = Nothing 'Destroy the object.
示例
在下面的示例中,我们正在创建一个类型为Scripting.Dictionary的对象。
Dim obj
Set obj = CreateObject("Scripting.Dictionary")
Set obj = Nothing.
对象用法
请单击每个给定的对象类型以了解更多信息。
| 对象类型 | 描述 |
|---|---|
| Class | 类是一个容器,它包含与其关联的方法和变量,并通过创建类类型的对象来访问。 |
| Scripting.FileSystemObject | 它是一组对象,我们可以用它来处理文件系统。 |
| Scripting.Dictionary | 一组对象,用于创建字典对象。 |
| Debug | 一个全局对象,我们可以用它将输出发送到 Microsoft 脚本调试器。 |
VBScript - 正则表达式
正则表达式是由构成模式的一系列字符组成的,主要用于搜索和替换。创建模式的目的是匹配特定的字符串,以便开发人员可以根据条件提取字符并替换某些字符。
RegExp 对象
RegExp 对象帮助开发人员匹配字符串的模式,其属性和方法帮助我们轻松地使用正则表达式。它类似于 JavaScript 中的 RegExp。
属性
Pattern − Pattern 方法表示用于定义正则表达式的字符串,在使用正则表达式对象之前应先设置它。
IgnoreCase − 一个布尔属性,表示如果为 true,则正则表达式是否应针对字符串中的所有可能的匹配项进行测试;如果为 false,则不进行测试。如果未明确指定,则 IgnoreCase 值设置为 False。
Global − 一个布尔属性,表示正则表达式是否应针对字符串中的所有可能的匹配项进行测试。如果未明确指定,则 Global 值设置为 False。
方法
Test(search-string) − Test 方法以字符串作为参数,如果正则表达式可以成功与字符串匹配,则返回 True,否则返回 False。
Replace(search-string, replace-string) − Replace 方法采用 2 个参数。如果搜索成功,则它将该匹配项替换为 replace-string,并返回新字符串。如果没有匹配项,则返回原始 search-string。
Execute(search-string) − Execute 方法的工作方式类似于 Replace,只是它返回一个 Matches 集合对象,其中包含每个成功匹配项的 Match 对象。它不会修改原始字符串。
Matches 集合对象
Matches 集合对象作为 Execute 方法的结果返回。此集合对象可以包含零个或多个 Match 对象,并且此对象的属性是只读的。
Count − Count 方法表示集合中 Match 对象的数量。
Item − Item 方法使可以从 Matches 集合对象访问 Match 对象。
Match 对象
Match 对象包含在 Matches 集合对象中。这些对象表示在搜索字符串后成功的匹配。
FirstIndex − 它表示在原始字符串中发生匹配的位置。此索引是从零开始的,这意味着字符串中的第一个位置为 0。
Length − 表示匹配字符串的总长度的值。
Value − 表示匹配的值或文本的值。访问 Match 对象时,这也是默认值。
关于 Pattern 参数的全部内容
模式构建类似于 PERL。模式构建是使用正则表达式时最重要的事情。在本节中,我们将讨论如何根据各种因素创建模式。
位置匹配
位置匹配的意义在于确保我们将正则表达式放置在正确的位置。
| 符号 | 描述 |
|---|---|
| ^ | 仅匹配字符串的开头。 |
| $ | 仅匹配字符串的结尾。 |
| \b | 匹配任何单词边界 |
| \B | 匹配任何非单词边界 |
字面量匹配
任何形式的字符,例如字母、数字或特殊字符,甚至十进制、十六进制都可以视为字面量。由于某些字符在正则表达式的上下文中已经具有特殊的含义,因此我们需要使用转义序列对其进行转义。
| 符号 | 描述 |
|---|---|
| 字母数字 | 仅匹配字母和数字字符。 |
| \n | 匹配换行符。 |
| \[ | 匹配 [ 字面量 |
| \] | 匹配 ] 字面量 |
| \( | 匹配 ( 字面量 |
| \) | 匹配 ) 字面量 |
| \t | 匹配水平制表符 |
| \v | 匹配垂直制表符 |
| \| | 匹配 | 字面量 |
| \{ | 匹配 { 字面量 |
| \} | 匹配 } 字面量 |
| \\ | 匹配 \ 字面量 |
| \? | 匹配 ? 字面量 |
| \* | 匹配 * 字面量 |
| \+ | 匹配 + 字面量 |
| \. | 匹配 . 字面量 |
| \b | 匹配任何单词边界 |
| \B | 匹配任何非单词边界 |
| \f | 匹配换页符 |
| \r | 匹配回车符 |
| \xxx | 匹配八进制数 xxx 的 ASCII 字符。 |
| \xdd | 匹配十六进制数 dd 的 ASCII 字符。 |
| \uxxxx | 匹配 UNICODE 字面量 xxxx 的 ASCII 字符。 |
字符类匹配
字符类是由自定义分组形成并在 [ ] 中括起来的模式。如果我们期望字符类不应该出现在列表中,则应使用否定符号(即脱字符 ^)忽略该特定字符类。
| 符号 | 描述 |
|---|---|
| [xyz] | 匹配字符集中包含的任何字符类。 |
| [^xyz] | 匹配字符集中未包含的任何字符类。 |
| . | 匹配除 \n 之外的任何字符类 |
| \w | 匹配任何单词字符类。等效于 [a-zA-Z_0-9] |
| \W | 匹配任何非单词字符类。等效于 [^a-zA-Z_0-9] |
| \d | 匹配任何数字类。等效于 [0-9]。 |
| \D | 匹配任何非数字字符类。等效于 [^0-9]。 |
| \s | 匹配任何空格字符类。等效于 [ \t\r\n\v\f] |
| \S | 匹配任何非空格字符类。等效于 [^\t\r\n\v\f] |
重复匹配
重复匹配允许在正则表达式中进行多次搜索。它还指定正则表达式中元素重复的次数。
| 符号 | 描述 |
|---|---|
| * | 匹配给定正则表达式的零个或多个出现。等效于 {0,}。 |
| + | 匹配给定正则表达式的一个或多个出现。等效于 {1,}。 |
| ? | 匹配给定正则表达式的零个或一个出现。等效于 {0,1}。 |
| {x} | 匹配给定正则表达式的恰好 x 个出现。 |
| {x,} | 匹配给定正则表达式至少 x 个或更多个出现。 |
| {x,y} | 匹配给定正则表达式的 x 到 y 个出现。 |
替换和分组
替换和分组帮助开发人员创建更复杂的正则表达式,尤其是在处理正则表达式中复杂的子句时,这提供了极大的灵活性和控制力。
| 符号 | 描述 |
|---|---|
| 0 | 分组子句以创建子句。“(xy)?(z)”匹配“xyz”或“z”。 |
| | | 替换组合一个正则表达式子句,然后匹配任何单个子句。“(ij)|(23)|(pq)”匹配“ij”或“23”或“pq”。 |
构建正则表达式
下面是一些示例,清楚地解释了如何构建正则表达式。
| 正则表达式 | 描述 |
|---|---|
| "^\s*.." 和 "..\s*$" | 表示在一行中可以有任意数量的前导和尾随空格字符。 |
| "((\$\s?)|(#\s?))?" | 表示可选的 $ 或 # 符号,后跟可选的空格。 |
| "((\d+(\.(\d\d)?)?))" | 表示至少存在一个数字,后跟可选的小数点和两位小数。 |
示例
以下示例检查用户是否输入了电子邮件ID,其格式应匹配,即电子邮件ID后跟“@”,然后后跟域名。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
strid = "welcome.user@tutorialspoint.co.us"
Set re = New RegExp
With re
.Pattern = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
.IgnoreCase = False
.Global = False
End With
' Test method returns TRUE if a match is found
If re.Test( strid ) Then
Document.write(strid & " is a valid e-mail address")
Else
Document.write(strid & " is NOT a valid e-mail address")
End If
Set re = Nothing
</script>
</body>
</html>
VBScript - 错误处理
编程中存在三种类型的错误:(a)语法错误,(b)运行时错误和(c)逻辑错误。
语法错误
语法错误,也称为解析错误,发生在 VBScript 的解释时间。例如,以下行会导致语法错误,因为它缺少右括号:
<script type = "text/vbscript"> dim x,y x = "Tutorialspoint" y = Ucase(x </script>
运行时错误
运行时错误,也称为异常,发生在执行期间,解释之后。例如,以下行会导致运行时错误,因为这里的语法正确,但在运行时它试图调用 fnmultiply,这是一个不存在的函数:
<script type = "text/vbscript">
Dim x,y
x = 10
y = 20
z = fnadd(x,y)
a = fnmultiply(x,y)
Function fnadd(x,y)
fnadd = x+y
End Function
</script>
逻辑错误
逻辑错误可能是最难追踪的错误类型。这些错误不是语法或运行时错误的结果。相反,当你在驱动脚本的逻辑中犯错并且没有得到预期的结果时,就会发生这些错误。你无法捕获这些错误,因为它取决于你的业务需求你想要在程序中使用哪种逻辑。例如,将数字除以零或编写进入无限循环的脚本。
Err 对象
假设我们有一个运行时错误,那么执行将停止并显示错误消息。作为开发人员,如果我们想捕获错误,则使用 **Error** 对象。
示例
在下面的示例中,**Err.Number** 给出错误号,**Err.Description** 给出错误描述。
<script type = "text/vbscript"> Err.Raise 6 ' Raise an overflow error. MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description Err.Clear ' Clear the error. </script>
VBScript 其他语句
VBScript 还有一些其他重要的语句来帮助开发人员开发高效的脚本。下表列出了这样一些重要语句的集合。在本节中,我们将详细讨论这些语句以及示例。
| 类别 | 函数名/语句名 |
|---|---|
| 选项 | Option Explicit |
| 脚本引擎 ID | ScriptEngine |
| 变量 | IsArray, IsEmpty, IsNull, IsNumeric, IsObject, TypeName |
| 表达式 | Eval, Execute |
| 控制语句 | With...End With |
| 数学函数 | Randomize |
Option Explicit
**Option Explicit** 强制开发人员在代码的某些部分使用 **Dim** 语句声明变量。
语法
Option Explicit
示例
如果我们使用 **Option Explicit** 并且没有声明变量,则解释器将抛出错误。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Option Explicit
Dim x,y,z,a
x = 10
y = 20
z = fnadd(x,y)
a = fnmultiply(x,y)
Function fnadd(x,y)
fnadd = x+y
End Function
</script>
</body>
</html>
ScriptEngine
**ScriptEngine** 表示正在使用的脚本语言的详细信息。它也与 **ScriptEngineMajorVersion, ScriptEngineMinorVersion, ScriptEngineBuildVersion** 结合使用,分别给出 vbscript 引擎的主版本、次版本和内部版本。
语法
ScriptEngine
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim scriptdetails
scriptdetails = " Version " & ScriptEngine & " - "
'For getting Major version, use ScriptEngineMajorVersion'
scriptdetails = scriptdetails & ScriptEngineMajorVersion & "."
'For getting Minor version, use ScriptEngineMinorVersion'
scriptdetails = scriptdetails & ScriptEngineMinorVersion & "."
'For getting Build version, use ScriptEngineBuildVersion'
scriptdetails = scriptdetails & ScriptEngineBuildVersion
Document.write scriptdetails
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Version VBScript - 5.8.16996
IsEmpty
IsEmpty 函数用于检查表达式是否为空。它返回布尔值。如果变量未初始化或显式设置为 Empty,则 **IsEmpty** 返回 True。否则表达式返回 False。
语法
IsEmpty(expression)
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim var, MyCheck
MyCheck = IsEmpty(var)
Document.write "Line 1 : " & MyCheck & "<br />"
var = Null ' Assign Null.
MyCheck = IsEmpty(var)
Document.write "Line 2 : " & MyCheck & "<br />"
var = Empty ' Assign Empty.
MyCheck = IsEmpty(var)
Document.write "Line 3 : " & MyCheck & "<br />"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Line 1 : True Line 2 : False Line 3 : True
IsNull
IsNull 函数用于检查表达式是否具有有效数据。它返回布尔值。如果变量为 Null,则 **IsNull** 返回 True,否则表达式返回 False。
语法
IsNull(expression)
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim var, res
res = IsNull(var)
document.write "Line 1 : " & res & "<br />"
var = Null
res = IsNull(var)
document.write "Line 2 : " & res & "<br />"
var = Empty
res = IsNull(var)
document.write "Line 3 : " & res & "<br />"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Line 1 : False Line 2 : True Line 3 : False
IsObject
IsObject 函数用于检查表达式是否具有有效的对象。它返回布尔值。如果表达式包含对象子类型,则 **IsObject** 返回 True,否则表达式返回 False。
语法
IsObject(expression)
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim fso,b
b = 10
set fso = createobject("Scripting.Filesystemobject")
x = isobject(fso)
Document.write "Line 1 : " & x & "<br />"
y = isobject(b)
Document.write "Line 2 : " & y & "<br />"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Line 1 : True Line 2 : False
IsNumeric
IsNumeric 函数用于检查表达式是否具有数字子类型。它返回布尔值。如果表达式包含数字子类型,则 **IsObject** 返回 True,否则表达式返回 False。
语法
IsNumeric(expression)
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim var, chk
var = 20
chk = IsNumeric(var)
Document.write "Line 1 : " & chk & "<br />"
var = "3.1415935745"
chk = IsNumeric(var)
Document.write "Line 2 : " & chk & "<br / >"
var = "20 Chapter 23.123 VBScript"
chk = IsNumeric(var)
Document.write "Line 3 : " & chk & "<br / >"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Line 1 : True Line 2 : True Line 3 : False
TypeName
TypeName 函数用于返回变量的变体子类型信息。
语法
TypeName(varname)
Typename 函数可以返回以下任何值。
Byte - 字节值
Integer - 整数值
Long - 长整数值
Single - 单精度浮点值
Double - 双精度浮点值
Currency - 货币值
Decimal - 十进制值
Date - 日期或时间值
String - 字符串值
Boolean - 布尔值
Empty - 未初始化的值
Null - 无效数据
Object - 对象的类型名称
Nothing - 尚未引用对象实例的对象变量
Error
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim ArrVar(2), vartype
NullVar = Null ' Assign Null value.
vartype = TypeName(3.1450)
Document.write "Line 1 : " & vartype & "<br />"
vartype = TypeName(432)
Document.write "Line 2 : " & vartype & "<br />"
vartype = TypeName("Microsoft")
Document.write "Line 3 : " & vartype & "<br />"
vartype = TypeName(NullVar)
Document.write "Line 4 : " & vartype & "< br />"
vartype = TypeName(ArrVar)
Document.write "Line 5 : " & vartype & "<br />"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
Line 1 : Double Line 2 : Integer Line 3 : String Line 4 : Null Line 5 : Variant()
Eval
Eval 函数执行表达式并返回结果为字符串或数字。
语法
Eval(expression)
参数 Expression 可以是字符串表达式或数字。如果将不包含数字表达式或函数名而仅包含简单文本字符串的字符串传递给 Eval 函数,则会发生运行时错误。例如,Eval("VBScript") 会导致错误。
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Document.write Eval("10 + 10") & "<br />"
Document.write Eval("101 = 200") & "<br />"
Document.write Eval("5 * 3") & "<br />"
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
20 false 15
Execute
Execute 语句接受的参数是一个字符串表达式,其中包含一个或多个要执行的语句。
语法
Execute(expression)
在 VBScript 中,a = b 可以用两种方式解释。它可以被视为赋值语句,其中 x 的值被赋给 y。它也可以被解释为一个表达式,它测试 a 和 b 是否具有相同的值。如果它们相同,则结果为 True;如果它们不同,则结果为 False。Execute 语句总是使用第一种解释,而 Eval 语句总是使用第二种解释。
示例
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim x
x = "Global"
y = "VBScript"
Execute("x = y")
msgbox x
msgbox y
</script>
</body>
</html>
执行脚本时,将文件保存为 .html 扩展名,屏幕上将显示以下结果。
VBScript VBScript
With..End With
With 语句允许我们对指定的对象执行一系列操作,而无需反复明确提及对象名称。
语法
With (objectname) statement 1 statement 2 statement 3 ... ... statement n End With
示例
执行以下脚本后,将打开 Winword 并输入指定的文本。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Msg = "Vbscript" & vbCrLf & "Programming"
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
' Objects methods are accessed without requaliyfying the objects again.'
With objWord
.Documents.Add
.Selection.TypeText Msg
.Selection.WholeStory
End With
</script>
</body>
</html>
Randomize
Randomize 语句初始化随机数生成器,这有助于开发人员生成随机数。
语法
Randomize [number]
示例
执行以下脚本后,将打开 Winword 并输入指定的文本。
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
Dim MyValue
Randomize
MyValue = Int((100 * Rnd) + 1) ' Generate random value between 1 and 100.
MsgBox MyValue
</script>
</body>
</html>
将上述脚本保存为 HTML,并在 IE 中执行脚本后,将显示以下输出。
42