VBA中的数据类型转换
在VBE中打开对象浏览器,按照下图操作:
找到VBA库并输入Conversion(转换)找到该模块,里面提供了数据转换函数。
VBA提供了两套内置的数据类型转换函数,第一组包含Int、 CVDate和Str,这是早期版本,只是向后兼容而保留。第二组函数都是以字母“C”开头,编程中使用第二组。
每个转换函数的语法基本相同,例如:
Expression是输入参数,然后转换为相应的数据类型。
VBA支持数据类型转换的功能有:
VBA.Conversion.CBool(Expression) as Boolean
将变量Expression转换为Boolean数据类型,expression可以是任何数值类型或任何能够转换为数值类型的字符串,如果expression = 0 or “0” 返回 False,否则返回True(-1)。
VBA.Conversion.CByte(Expression) as Byte
将变量expression转换为Byte数据类型,expression可以是任何数值类型或任何能够转换为数值类型的字符串。Expression的范围0-255,如果exp超出范围将显示错误。如果exp是浮点数,那么在转换为byte之前,先四舍五入,再转换。
VBA.Conversion.CDec(exp)
将exp转换为Decimal子类型。Exp可以是任何Decimal范围内的数值或字符串。在VBA中这个函数是唯一能生产Decimal数据类。
VBA.Conversion.CDate(exp) as Date
将exp转换为 Date/Time数据类型。exp 是日期数字和表示日期的字符串并将其转换为电脑表示的日期格式。例如:在设置为美国格式mm/dd/yy的电脑上,如果将英国日期格dd/mm/yy且使用CDate进行转换,则转换为美国日期格式。
VBA.Conversion.CCur(exp) as Currency
将exp转换为货币数据类型,exp 可是可以转换的数值和字符串,该函数根据电脑语言环境对十分位和千分位进行编码。
VBA.Conversion.CInt(exp) as Integer
将exp 转换为 Integer类型,exp 可以是Interger表示范围的任何数值和字符串。
VBA.Conversion.CLng(exp) as Long
将exp 转换为Long类型,exp 可以是Long表示范围内的数值和字符串。
VBA.Conversion.CSng(exp) as Single
将exp 转换为Single类型,exp 可以是Single表示范围内的数值和字符串。
VBA.Conversion.CStr(exp) as String
将exp 转换为String类型,exp 可以任何数据类型
VBA.Conversion.CVar(exp) as Variant
将exp 转换为Variant类型,exp 可以任何数据类型
Variant变体数据类型
VBA中包含一种特殊的数据类型即Variant(变体)类型。它允许与VBA中任何数据类型使用并自动计算出赋值类型最接近的数据类型,只是性能和代码的阅读收到影响。
Variant特殊的子类型
Variant可以表示所有的内置数据类型外,该变体还支持以下特殊数据类型。
Empty
在声明Variant新变量并没有赋值前,Empty子类型将自动赋值给变量。
var1的子类型为 Empty,在var2没有赋值前也为Empty。可以显示赋空值。
Null
Null是一种特殊的子类型,表示变量不包含任何有效的数据,为了类型为Null,变量必须显示的赋Null。
Error
错误子类型用于存储错误编号,错误编号由VBA自动生成,然后供错误处理程序使用。
确定Variant表示的具体数据类型
让变量Variant来代替所有的数据类型很好,但是有时候要确定储存到变量里真实的数据类型,VBA提供两个函数:VBA.Information.VarType 返回整数来确定具体的数据类型。VBA.Information.TypeName 返回具体数据类型的字符串。
VarType
语法:
VBA.Information.VarType(exp) as VBA.VbVarType
Exp 需要确定子类型的变量,下面是其返回的具体子类型
返回值
|
子类型
|
枚举符号
|
0
|
Empty
|
vbEmpty
|
1
|
Null
|
vbNull
|
2
|
Integer
|
vbInteger
|
3
|
Long
|
vbLong
|
4
|
Single
|
vbSingle
|
5
|
Double
|
vbDouble
|
6
|
Currency
|
vbCurrency
|
7
|
Date
|
vbDate
|
8
|
String
|
vbString
|
9
|
OLE Automation object
|
vbObject
|
10
|
Error
|
vbError
|
11
|
Boolean
|
vbBoolean
|
12
|
Array of Variant
|
vbVariant
|
13
|
Data access object
|
vbDataObject
|
14
|
Decimal
|
vbDecimal
|
17
|
Byte
|
vbByte
|
36
|
User-defined Type
|
vbUserDefinedType
|
8192
|
Array
|
vbArray
|
实际,VarType函数不会返回8192,如上表所述,当传递数组变量时,VarType返回8192以及数组具体类型值的和。
TypeName
该函数返回具体数据类型的字符串形式。
Variant和强类型
Variant可以满足所有的数据类型需求,但是性能会下降。对比确定的数据类型处理速度要慢30%左右。
返回Variant和强类型的函数
VBA语言包含许多字符串处理函数,它们有两个版本,一个返回Variant,另一个返回字符串。返回字符串的函数名以美元符号结尾。通过对比发现,返回Variant的函数执行速度,比返回字符串的函数要慢30%左右。强烈建议使用$结尾的函数。