(一)vbs只有一种数据类型Variant,包含17种子类型;vbs数据类型的前缀是vb,而不是vbs,因为vbs是从VB语言简化而来的

01.vbEmpty~~~未初始化
02.vbNull~~~无有效数据
03.vbInteger~~~整数,双字节有符号整数
04.vbLong~~~长整数,四字节有符号整数
05.vbSingle~~~单精度浮点数,四字节浮点数
06.vbDouble~~~双精度浮点数,八字节浮点数
07.vbCurrency~~~货币
08.vbDate~~~日期时间
09.vbString~~~字符串
10.vbObject~~~对象
11.vbError~~~错误
12.vbBoolean~~~布尔值
13.vbDataObject~~~数据对象
14.vbDecimal~~~十进制数
15.vbByte~~~字节,单字节无符号整数
16.vbArray + vbByte~~~字节数组
17.vbArray + vbVariant~~~普通数组

(二)与数据类型相关的内部函数17个

(A)数据类型查询,2个函数:
01.TypeName 返回目标的数据类型的类型全名
02.VarType 返回目标的数据子类型对应的常数值

(B)数据类型判断,6个函数:
03.IsArray 判断目标是否为数组
04.IsDate 判断目标是否为一个有效的日期时间表达式
05.IsEmpty 判断目标是否为Empty数据子类型
06.IsNull 判断目标是否为Null数据子类型
07.IsNumeric 判断目标是否为一个数值表达式
08.IsObject 判断目标是否为对象类型

(C)数据类型转换,9个函数:
09.CBool 将目标的数据子类型转换为Boolean
10.CByte 将目标的数据子类型转换为Byte
11.CCur 将目标的数据子类型转换为Currency
12.CDate 将目标的数据子类型转换为Date
13.CDbl 将目标的数据子类型转换为Double
14.CInt 将目标的数据子类型转换为Integer
15.CLng 将目标的数据子类型转换为Long
16.CSng 将目标的数据子类型转换为Single
17.CStr 将目标的数据子类型转换为String

(三).示例1

‘符号后面是注释 X 3遍

‘符号后面是注释 X 3遍

‘符号后面是注释 X 3遍

‘—————————————————————————————————–

Dim s

MsgBox TypeName(s) ‘Empty
MsgBox VarType(s) ‘0

s = Null
MsgBox TypeName(s) ‘Null
MsgBox VarType(s) ‘1

s = 32767
MsgBox TypeName(s) ‘Integer
MsgBox VarType(s) ‘2

s = 32768
MsgBox TypeName(s) ‘Long
MsgBox VarType(s) ‘3

s = CSng(1)
MsgBox TypeName(s) ‘Single
MsgBox VarType(s) ‘4

s = 1.0
MsgBox TypeName(s) ‘Double
MsgBox VarType(s) ‘5

s = CCur(1)
MsgBox TypeName(s) ‘Currency
MsgBox VarType(s) ‘6

s = Now()
MsgBox TypeName(s) ‘Date
MsgBox VarType(s) ‘7

s = “大师·张三丰”
MsgBox TypeName(s) ‘String
MsgBox VarType(s) ‘8

Set s = Err
MsgBox TypeName(s) ‘Object
MsgBox VarType(s) ‘9

Call abc( , 1) ‘最后一个参数不能缺省
Sub abc(x, y)
MsgBox TypeName(x) ‘Error
MsgBox VarType(x) ’10
End Sub

s = True
MsgBox TypeName(s) ‘Boolean
MsgBox VarType(s) ’11

s = CreateObject(“Scripting.FileSystemObject”).Drives.[_NewEnum]
MsgBox TypeName(s) ‘Unknown
MsgBox VarType(s) ’13

s = CByte(1)
MsgBox TypeName(s) ‘Byte
MsgBox VarType(s) ’17

With CreateObject(“Msxml2.DOMDocument”).CreateElement(“binary”)
.DataType = “bin.hex” ’16进制
.Text = “3230313437353738” ’32是第一字节,30是第二字节
s = .NodeTypedValue ‘生成一个字节数组
End With
MsgBox TypeName(s) ‘Byte()
MsgBox VarType(s) ‘8209

s = Array(“李白”, “杜甫”)
MsgBox TypeName(s) ‘Variant()
MsgBox VarType(s) ‘8204

(四).示例2

‘符号后面是注释 X 3遍
‘vbDecimal数据类型,十进制数,不能用TypeName()读取类型,会报错,
‘该类型不能直接参与数值运算,必须先转换为字符串类型’示例:vbDecimal数据类型,读取Access数据库中的DECIMAL数据类型
‘——————————————————————————————————————————–
Option Explicit
Dim oFSO, oConnection, oRecordset, s

Const FILE = “D:\1\1.mdb” ‘Access数据库文件,要求目标文件夹已存在

Call RunAs32() ‘访问Access数据库,要求vbs运行在32位应用程序模式

‘连接字符串
s = “Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Data Source=” & FILE

‘删除数据库文件并新建,防止已有数据库文件导致示例出错
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
If oFSO.FileExists(FILE) Then oFSO.DeleteFile FILE, True
CreateObject(“ADOX.Catalog”).Create s

Set oConnection = CreateObject(“ADODB.Connection”)
oConnection.Open s

oConnection.Execute “CREATE TABLE 表1(vbDataObject DECIMAL)”
oConnection.Execute “INSERT INTO 表1 VALUES(2)”

Set oRecordset = CreateObject(“ADODB.Recordset”)
oRecordset.Open “SELECT * FROM 表1”, oConnection
s = oRecordset.Fields.Item(0).Value
oRecordset.Close()
oConnection.Close()

MsgBox VarType(s) ’14
‘MsgBox TypeName(s) ‘会报错

MsgBox 3 + CStr(s) ‘5 (必须先转换为字符串类型)

Sub RunAs32()
Dim oWshShell, oFSO, s, i
Set oWshShell = CreateObject(“WScript.Shell”)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
s = oWshShell.ExpandEnvironmentStrings(“%windir%\SysWOW64\WScript.exe”)
If oFSO.FileExists(s) And LCase(WScript.FullName) <> LCase(s) Then
s = s & ” “”” & WScript.ScriptFullName & “”” “
For Each i In WScript.Arguments
If InStr(i, ” “) > 0 Then i = “””” & i & “”””
s = s & i & ” “
Next
oWshShell.Run Left(s, Len(s) – 1)
WScript.Quit()
End If
End Sub

(五).示例3

‘符号后面是注释 X 3遍

‘vbDataObject数据对象,是一个不常见的数据类型
‘一般指向一个对象的接口的指针,其数据类型是数据对象

‘比如:
‘一个集合性质的对象的隐藏属性_NewEnum,是一个指向IUnKnown接口的指针
‘Msxml2.Xmlhttp对象的responseStream属性,是一个指向IStream接口的指针

‘vbs不支持指针,可以读取其数据类型,但不能直接使用这些属性’示例:数据对象DataObject数据类型

‘当变量值不是对象类型时,不能用Set语句,而是直接用=
‘当变量值是对象类型时,必须用Set语句
‘当变量值是数据对象时,两者都可以
‘—————————————————————————————————–

Dim oFSO, oDrives, s

Set oFSO = CreateObject(“Scripting.FileSystemObject”)
Set oDrives = oFSO.Drives

s = oDrives.[_NewEnum]
Set s = oDrives.[_NewEnum]

MsgBox TypeName(s) ‘Unknown (未知的类型)
MsgBox VarType(s) ’13
MsgBox IsObject(s) ‘Falsevbs中,变量赋值

Views: 33

Hi, I’m vbsgirl

办公职员