VBS简介

VBScript是Microsoft Visual Basic Scripting Edition的简称,也被缩写为VBS。VBScript是微软开发的一种脚本语言,可以看作是VB语言的简化版。它具有容易学习的特性。可以直接作为一个可执行程序。

数据类型和变量、注释

VBS数据类型

VBS只有一种数据类型,称为 Variant。
blob

VBS变量的定义

变量:变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。

变量的声明:声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在脚本中显式声明变量。

命名规则
变量命名必须遵循 VBScript 的标准命名规则。变量命名必须遵循:

  • 字符必须是字母开头,由字母、数字和下划线组成。
  • 长度不能超过 255 个字符。
  • 在被声明的作用域内必须唯一。
  • 不能为关键字。

VBS变量名称取法

匈牙利命名法:匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=类型+对象描述。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。

中文 英文 缩写
字符串 String str
整型 Integer Int
长整型 Long Lng
对象 Object Obj

例如:

  • 文件路径:strPath
  • 文件大小:intSize
  • 几何面积:lngArea
  • FSO对象:objFSO

Option Explicit语句

变量显式定义与隐式定义区别

显式定义

Dim var
var = "我是var"
MsgBox var

隐式定义

var = "我是var"
MsgBox var

在运行效果上相同,都会分配内存给变量,但建议使用显式定义,一方面隐式定义的变量的数据类型可能不符合预期,另一方面变量名出错不容易发现。

Option Explicit语句

Option Explicit
Dim var_var_var
var = "我是var"
MsgBox var_var_vat

Option Explicit意思是:在模块级别中使用,强制显式声明模块中的所有变量,即变量只有声明后才能使用。

这样,可以避免变量因名称拼写等错误带来的结果错误,并且“Option Explicit”可以加快程序的运行速度,它节省了在程序运行时动态分配变量存储空间的时间。
微信截图_20191031001250.png

VBS的数组

  • 有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。下例声明了一个包含 11 个元素的一维数组:
  • Dim A(10)
  • 虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。
  • 在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:
  • A(0) = 256
  • A(1) = 324
  • A(2) = 100
  • . . .
  • A(10) = 55

多维数组、动态数组

  • 多维数组:数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。
Option Explicit
Dim aryTest(9,9)

aryTest(0,0) = 0
aryTest(0,1) = 1

MsgBox aryTest(0,1)
  • 动态数组:即在运行脚本时大小发生变化的数组 。对数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组,括号中不包含任何数字。例如:
Option Explicit
Dim aryTest(), i, var, j

i = 0
var = ""

While var<>"$"
    ReDim Preserve aryTest(i)
    aryTest(i) = InputBox("输入")
    var = aryTest(i)
    i = i+1
Wend

For j = 0 To i-1
    MsgBox aryTest(j)
Next

上述代码循环读取用户输入的字符串,赋值给aryTest动态数组,以“$”为结束标志,然后循环输出每个字符串,这里注意ReDim Preserve aryTest(i)语句,每次执行都会重新分配空间给该动态数组,由于i的值在增长,所以分配的空间在增加,其中Preserve关键字表示保留之前的值。

VBS的常量和注释

常量:常量是具有一定含义的名称,用于代替数字或字符串,其值从不改变。(最好采用一个命名方案以区分常量和变量。这样可以避免在运行脚本时对常量重新赋值。例如,可以使用“vb”或“con”作常数名的前缀,或将常量名的所有字母大写。将常量和变量区分开可以在开发复杂的脚本时避免混乱。)

Option Explicit
Const PI = 3.14159
Dim sum
sum = 100 * PI
MsgBox sum

注释:Rem语句或者‘ 符号

Option Explicit

Const PI = 3.14159

Dim sum

Rem 下面是运算一个常量的乘法
'   下面是运算一个常量的乘法
sum = 100 * PI

MsgBox sum

VBS的常用函数

数据类型转换函数

CBool 函数

返回表达式,此表达式已转换为 Boolean 子类型的 Variant。

CBool(expression)
expression 是任意有效的表达式。

如果 expression 是零,则返回 False;否则返回 True。如果 expression 不能解释为数值,则将发生运行时错误。

下面的示例使用 CBool 函数将一个表达式转变成 Boolean 类型。如果表达式所计算的值非零,则 CBool 函数返回 True;否则返回 False。

Dim A, B, Check
A = 5: B = 5            ' 初始化变量。
Check = CBool(A = B)    ' 复选框设为 True 。
A = 0                   ' 定义变量。
Check = CBool(A)        ' 复选框设为 False 。

这里的冒号可以将多条语句合并在同一行中,用冒号分隔,从左到右依次执行,类似于其他高级语言中的分号。

CByte 函数

返回表达式,此表达式已被转换为 Byte 子类型的 Variant。

CByte(expression)
expression 参数是任意有效的表达式。

通常,可以使用子类型转换函数书写代码,以显示某些操作的结果应被表示为特定的数据类型,而不是默认类型。例如,在出现货币、单精度、双精度或整数运算的情况下,使用 CByte 强制执行字节运算。

CByte 函数用于进行从其他数据类型到 Byte 子类型的的国际公认的格式转换。例如对十进制分隔符(如千分符)的识别,可能取决于系统的区域设置。

如果 expression 在 Byte 子类型可接受的范围之外,则发生错误。下面的示例利用 CByte 函数把 expression 转换为 byte:

Dim MyDouble, MyByte
MyDouble = 125.5678         ' MyDouble 是一个双精度值。
MyByte = CByte(MyDouble)    ' MyByte 包含 126 。
Chr 函数

返回与指定的 ANSI 字符代码相对应的字符。

Chr(charcode)
charcode 参数是可以标识字符的数字。

说明
从 0 到 31 的数字表示标准的不可打印的 ASCII 代码。例如,Chr(10) 返回换行符。

下面例子利用 Chr 函数返回与指定的字符代码相对应的字符:

Dim MyChar
MyChar = Chr(65)    '返回 A。
MyChar = Chr(97)    '返回 a。
MyChar = Chr(62)    '返回 >。
MyChar = Chr(37)    '返回 %。

注意:ChrB 函数与包含在字符串中的字节数据一起使用。ChrB 不是返回一个或两个字节的字符,而总是返回单个字节的字符。ChrW 是为使用 Unicode 字符的 32 位平台提供的。它的参数是一个 Unicode (宽字符)的字符代码,因此可以避免将 ANSI 转化为 Unicode 字符。

除此之外还有其他类型的转换,大同小异,不再赘述。

数学计算函数

Cos 函数

返回某个角的余弦值。

Cos(number)
number 参数可以是任何将某个角表示为弧度的有效数值表达式。

Cos 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的邻边长度与斜边长度之比。结果范围在 -1 到 1 之间。

角度转化成弧度方法是用角度乘以 pi/180。反之,弧度转化成角度的方法是用弧度乘以 180/pi。

下面的示例利用 Cos 函数返回一个角的余弦值:

Dim MyAngle, MySecant
MyAngle = 1.3                ' 用弧度定义一个角。
MySecant = 1 / Cos(MyAngle)  ' 计算正割。sec

日期函数

Time 函数

返回 Date 子类型 Variant,指示当前系统时间。

下面的示例利用 Time 函数返回当前系统时间:

Dim MyTime
MyTime = Time   ' 返回当前系统时间。
Weekday 函数

返回代表一星期中某天的整数。

Weekday(date, [firstdayofweek])
参数
date
可以代表日期的任意表达式。如果 date 参数中包含 Null,则返回 Null。

Firstdayofweek
指定星期中第一天的常数。如果省略,默认使用 vbSunday。

下面例子利用 Weekday 函数得到指定日期为星期几:

Dim MyDate, MyWeekDay
MyDate = #October 19, 1962#   ' 分派日期。
MyWeekDay = Weekday(MyDate)   ' 由于 MyWeekDay 包含 6,MyDate 代表星期五。
DateAdd 函数

返回已添加指定时间间隔的日期。

DateAdd(interval, number, date)

参数
interval
必选项。字符串表达式,表示要添加的时间间隔。

number
必选项。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。

date
必选项。Variant 或要添加 interval 的表示日期的文字。

可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。

DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月:

NewDate = DateAdd("m", 1, "31-Jan-95")
在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。

如果计算的日期是在公元 100 年之前,则会产生错误。

如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。

DateDiff 函数

返回两个日期之间的时间间隔。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

DateDiff 函数的语法有以下参数:

interval
必选项。字符串表达式表示用于计算 date1 和 date2 之间的时间间隔。

date1, date2
必选项。日期表达式。用于计算的两个日期。

Firstdayofweek
可选项。指定星期中第一天的常数。如果没有指定,则默认为星期日。

Firstweekofyear
可选项。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。

DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。

下面的示例利用 DateDiff 函数显示今天与给定日期之间间隔天数:

Function DiffADate(theDate)
   DiffADate = "从当天开始的天数:" & DateDiff("d", Now, theDate)
End Function
Date 函数

返回当前系统日期。

利用 Date 函数返回当前系统日期:

Dim MyDate
MyDate = Date   ' MyDate 包含当前系统日期。
Now

根据计算机系统设定的日期和时间返回当前的日期和时间值。

Dim MyVar
MyVar = Now ' MyVar 包含当前的日期和时间。

判断函数

IsArray 函数

返回 Boolean 值指明某变量是否为数组。
IsArray(varname)
varname 参数可以是任意变量。

IsEmpty 函数

返回 Boolean 值指明变量是否已初始化。

IsEmpty(expression)

expression 参数可以是任意表达式。然而,由于 IsEmpty 用于判断一个变量是否已初始化,故 expression 参数经常是一个变量名。

IsNull 函数

返回 Boolean 值,指明表达式是否不包含任何有效数据 (Null)。

IsNull(expression)
expression 参数可以是任意表达式。

说明
如果 expression 为 Null,则 IsNull 返回 True,即表达式不包含有效数据,否则 IsNull 返回 False。如果 expression 由多个变量组成,则表达式的任何组成变量中的 Null 都会使整个表达式返回 True。

Null 值指出变量不包含有效数据。Null 与 Empty 不同,后者指出变量未经初始化。Null 与零长度字符串 (“”) 也不同,零长度字符串往往指的是空串。

警告 使用 IsNull 函数可以判断表达式是否包含 Null 值。在某些情况下想使表达式取值为 True,例如 IfVar=Null 和 IfVar<>Null,但它们通常总是为 False。这是因为任何包含 Null 的表达式本身就为 Null,所以表达式的结果为 False。

下面的示例利用 IsNull 函数决定变量是否包含 Null :

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar)   ' 返回 False。
MyVar = Null   ' 赋为 Null。
MyCheck = IsNull(MyVar)   ' 返回 True。
MyVar = Empty   ' 赋为 Empty。
MyCheck = IsNull(MyVar)   ' 返回 False。
IsNumeric 函数

返回 Boolean 值指明表达式的值是否为数字。

IsNumeric(expression)
expression 参数可以是任意表达式。

说明
如果整个 expression 被识别为数字,IsNumeric 函数返回 True;否则函数返回 False。如果 expression 是日期表达式,IsNumeric 函数返回 False。

下面的示例利用 IsNumeric 函数决定变量是否可以作为数值:

Dim MyVar, MyCheck
MyVar = 53   '赋值。
MyCheck = IsNumeric(MyVar)   ' 返回 True。
MyVar = "459.95"   ' 赋值。
MyCheck = IsNumeric(MyVar)   ' 返回True。
MyVar = "45 Help"   ' 赋值。
MyCheck = IsNumeric(MyVar)   ' 返回 False。

字符串处理函数

LTrim、RTrim 和 Trim 函数

返回不带前导空格 (LTrim)、后续空格 (RTrim) 或前导与后续空格 (Trim) 的字符串副本。

LTrim(string)
RTrim(string)
Trim(string)
string 参数是任意有效的字符串表达式。如果 string 参数中包含 Null,则返回 Null。

下面的示例利用 LTrim, RTrim, 和 Trim 函数分别用来除去字符串开始的空格、尾部空格、 开始和尾部空格:

Dim MyVar
MyVar = LTrim("   vbscript ")   'MyVar 包含 "vbscript "。
MyVar = RTrim("   vbscript ")   'MyVar 包含 "   vbscript"。
MyVar = Trim("   vbscript ")   'MyVar 包含 "vbscript"。
Split 函数

返回基于 0 的一维数组,其中包含指定数目的子字符串。

Split(expression[, delimiter[, count[, start]]])

参数
expression
必选项。字符串表达式,包含子字符串和分隔符。如果 expression 为零长度字符串,Split 返回空数组,即不包含元素和数据的数组。

delimiter
可选项。用于标识子字符串界限的字符。如果省略,使用空格 (“”) 作为分隔符。如果 delimiter 为零长度字符串,则返回包含整个 expression 字符串的单元素数组。

count
可选项。被返回的子字符串数目,-1 指示返回所有子字符串。

Compare
可选项。指示在计算子字符串时使用的比较类型的数值。
compare 参数可以有以下值:

常数 描述
vbBinaryCompare 0 执行二进制比较
vbTextCompare 1 执行文本比较

说明

下面的示例利用 Split 函数从字符串中返回数组。函数对分界符进行文本比较,返回所有的子字符串。

Dim MyString, MyArray, Msg
MyString = "VBScriptXisXfun!"
MyArray = Split(MyString, "x", -1, 1)
' MyArray(0) 包含 "VBScript"。
' MyArray(1) 包含 "is"。
' MyArray(2) 包含 "fun!"。
Msg = MyArray(0) & " " & MyArray(1)
Msg = Msg   & " " & MyArray(2)
MsgBox Msg
InStr 函数

返回某字符串在另一字符串中第一次出现的位置。

InStr([start, ]string1, string2[, compare])

参数

start
可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。

string1
必选项。接受搜索的字符串表达式。

string2
必选项。要搜索的字符串表达式。

compare
可选项。指示在计算子字符串时使用的比较类型的数值。如果省略,将执行二进制比较。

下面的示例利用 InStr 搜索字符串:

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"   ' 要搜索的字符串。
SearchChar = "P"   ' Search for "P".
MyPos = Instr(4, SearchString, SearchChar, 1)   ' 在位置 4 进行的文本比较。返回 6。
MyPos = Instr(1, SearchString, SearchChar, 0)   ' 在位置 1 进行的二进制比较。返回 9。
MyPos = Instr(SearchString, SearchChar)   ' 默认情况下,进行的是二进制比较(省略了最后的参数)。返回 9。
MyPos = Instr(1, SearchString, "W")   ' 在位置 1 进行的二进制比较。返回 0(找不到 "W")。
Len 函数

返回字符串内字符的数目,或是存储一变量所需的字节数。

Len(string | varname)

参数
string
任意有效的字符串表达式。如果 string 参数包含 Null,则返回 Null。

Varname
任意有效的变量名。如果 varname 参数包含 Null,则返回 Null。

Dim MyString
MyString = Len("VBSCRIPT") 'MyString 包含 8。
Left 函数

返回指定数目的从字符串的左边算起的字符。

Left(string, length)

参数
string
字符串表达式,其最左边的字符被返回。如果 string 参数中包含 Null,则返回 Null。

Length
数值表达式,指明要返回的字符数目。如果是 0,返回零长度字符串 (“”);如果大于或等于 string 参数中的字符总数,则返回整个字符串。

下面的示例利用Left 函数返回MyString 的左边三个字母:

Dim MyString, LeftString
MyString = "VBSCript"
LeftString = Left(MyString, 3) 'LeftString 包含 "VBS"。
MsgBox 函数

在对话框中显示消息,等待用户单击按钮,并返回一个值指示用户单击的按钮。

MsgBox(prompt[, buttons][, title][, helpfile, context])

参数
prompt
作为消息显示在对话框中的字符串表达式。prompt 的最大长度大约是 1024 个字符,这取决于所使用的字符的宽度。如果 prompt 中包含多个行,则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) & Chr(10)) 分隔各行。

Buttons
数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,默认按钮的标识以及消息框样式的数值的总和。如果省略,则 buttons 的默认值为 0。

1.png

Title
显示在对话框标题栏中的字符串表达式。如果省略 title,则将应用程序的名称显示在标题栏中。

Helpfile
字符串表达式,用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供 helpfile,则必须提供 context。

Context
数值表达式,用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供 context,则必须提供 helpfile。

下面的例子演示了 MsgBox 函数的用法:

Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
   ' MyVar 包含 1 或 2,这取决于单击的是哪个按钮。

对象处理函数

分类:

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注