VBA基础语法:类型转换函数

目录

类型转换函数

语法

返回类型

说明

CBool 函数示例

CByte 函数示例

CCur 函数示例

此示例使用 CCur 函数将表达式转换为 Currency。

CDate 函数示例此示例使用 CDate 函数将字符串转换为 Date。通常,建议不要将日期和时间硬编码为字符串(如此示例中所示)。请改为使用日期文字和时间文字,如 #2/12/1969# 和 #4:45:23 PM#。

CDbl 函数示例此示例使用 CDbl 函数将表达式转换为 Double。

CDec 函数示例此示例使用 CDec 函数将数字值转换为 Decimal。

CInt 函数示例此示例使用 CInt 函数将值转换为 Integer。

CLng 函数示例此示例使用 CLng 函数将值转换为 Long。

CSng 函数示例此示例使用 CSng 函数将值转换为 Single。

CStr 函数示例此示例使用 CStr 函数将数字值转换为 String。

CVar 函数示例此示例使用 CVar 函数将表达式转换为 Variant。

StrConv 函数

StrConv 函数示例


类型转换函数

每个函数都可以强制将一个表达式转换成某种特定数据类型。

语法

CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CLngLng(expression)(只在 64 位平台上有效。)

CLngPtr(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

必要的 expression 参数可以是任何字符串表达式或数值表达式。

返回类型

函数名称决定返回类型,如下所示:

函数 返回类型 expression 参数范围
CBool Boolean 任何有效的字符串或数值表达式。
CByte Byte 0 至 255。
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDate Date 任何有效的日期表达式。
CDbl Double 负数从 -1.79769313486231E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec Decimal 零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt Integer -32,768 至 32,767,小数部分四舍五入。
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CLngLng LongLong -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;小数部分四舍五入。(只在 64 位平台上有效。)
CLngPtr LongPtr 在 32 位系统上,为 -2,147,483,648 到 2,147,483,647;在 64 位系统上,为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;对于 32 位和 64 位系统,小数部分四舍五入。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr String 依据 expression 参数返回 Cstr。
CVar Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。

说明

如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。

注意:必须使用转换函数将 LongLong(包括 64 位平台上的 LongPtr)显式赋予较小的整型。不允许将 LongLong 隐式转换为较小的整数。

通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。

应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的区域设置都会被妥善识别。

当小数部分恰好为 0.5 时,Cint CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint CLng 函数不同于 Fix Int 函数,Fix Int 函数会将小数部分截断而不是四舍五入。并且 Fix Int 函数总是返回与传入的数据类型相同的值。

使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。

CDate 依据系统上的区域设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。

CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。

注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。

CBool 函数示例

此示例使用 CBool 函数将表达式转换为 Boolean。如果表达式的值不为零,则 CBool 返回 True;否则,返回 False

Dim A, B, Check
A = 5:B = 5    ' 初始化变量。
Check = CBool(A = B)    ' Check 包含 True。

A = 0    ' 定义变量。
Check = CBool(A)    ' Check 包含 False。

CByte 函数示例

此示例使用 CByte 函数将表达式转换为 Byte

CByte 函数示例
此示例使用 CByte 函数将表达式转换为 Byte。

Dim MyDouble, MyByte
MyDouble = 125.5678    ' MyDouble 为 Double。
MyByte = CByte(MyDouble)    ' MyByte 包含 126。

CCur 函数示例

此示例使用 CCur 函数将表达式转换为 Currency

Dim MyDouble, MyCurr
MyDouble = 543.214588    ' MyDouble 为 Double。
MyCurr = CCur(MyDouble * 2)    ' 将 MyDouble * 2 的结果
' (1086.429176) 转换为 
' Currency (1086.4292)。

CDate 函数示例
此示例使用 CDate 函数将字符串转换为 Date。通常,建议不要将日期和时间硬编码为字符串(如此示例中所示)。请改为使用日期文字和时间文字,如 #2/12/1969# 和 #4:45:23 PM#。

Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "February 12, 1969"    ' 定义日期。
MyShortDate = CDate(MyDate)    ' 转换为 Date 数据类型。

MyTime = "4:35:47 PM"    ' 定义时间。
MyShortTime = CDate(MyTime)    ' 转换为 Date 数据类型。

CDbl 函数示例
此示例使用 CDbl 函数将表达式转换为 Double

Dim MyCurr, MyDouble
MyCurr = CCur(234.456784)    ' MyCurr 为 Currency。
MyDouble = CDbl(MyCurr * 8.2 * 0.01)    ' 转换结果为 Double。

CDec 函数示例
此示例使用 CDec 函数将数字值转换为 Decimal

Dim MyDecimal, MyCurr
MyCurr = 10000000.0587    ' MyCurr 为 Currency。
MyDecimal = CDec(MyCurr)     ' MyDecimal 为 Decimal。

CInt 函数示例
此示例使用 CInt 函数将值转换为 Integer

Dim MyDouble, MyInt
MyDouble = 2345.5678    ' MyDouble 为 Double。
MyInt = CInt(MyDouble)    ' MyInt 包含 2346。

CLng 函数示例
此示例使用 CLng 函数将值转换为 Long

Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45:MyVal2 = 25427.55    ' MyVal1、MyVal2 为 Double。
MyLong1 = CLng(MyVal1)    ' MyLong1 包含 25427。
MyLong2 = CLng(MyVal2)    ' MyLong2 包含 25428。

CSng 函数示例
此示例使用 CSng 函数将值转换为 Single

Dim MyDouble1, MyDouble2, MySingle1, MySingle2
' MyDouble1、MyDouble2 为 Double。
MyDouble1 = 75.3421115:MyDouble2 = 75.3421555
MySingle1 = CSng(MyDouble1)    ' MySingle1 包含 75.34211。
MySingle2 = CSng(MyDouble2)    ' MySingle2 包含 75.34216。

CStr 函数示例
此示例使用 CStr 函数将数字值转换为 String

Dim MyDouble, MyString
MyDouble = 437.324    ' MyDouble 为 Double。
MyString = CStr(MyDouble)    ' MyString 包含 "437.324"。

CVar 函数示例
此示例使用 CVar 函数将表达式转换为 Variant

Dim MyInt, MyVar
MyInt = 4534    ' MyInt 为 Integer。
MyVar = CVar(MyInt & "000")    ' MyVar 包含字符串 
        ' 4534000.

StrConv 函数

返回按指定类型转换的 Variant (String)。

语法

StrConv(string, conversion, LCID)

StrConv 函数的语法有下面的命名参数:

部分 说明
string 必要参数。要转换的字符串表达式。
conversion 必要参数。Integer。其值的和决定转换的类型。
LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)

设置值

conversion 参数的设置值为:

常数 说明
vbUpperCase 1 将字符串文字转成大写。
vbLowerCase 2 将字符串文字转成小写。
vbProperCase 3 将字符串中每个字的开头字母转成大写。
vbWide* 4* 将字符串中单字节字符转成双字节字符。
vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
vbKatakana** 16** 将字符串中平假名字符转成片假名字符。
vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。 (在Macintosh中不可用。)
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。 (在Macintosh中不可用。)

*应用到远东区域。

**仅应用到日本。

注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的区域使用常数 vbWidevbNarrowvbKatakana,和 vbHiragana 时,就会导致运行时错误。

下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。

说明

在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。

StrConv 函数示例

本示例使用StrConv 函数来将Unicode 字符串转换成 ANSI 字符串。

Dim i As Long
Dim x() As Byte
x = StrConv("ABCDEFG", vbFromUnicode)    ' 转换字符串。
For i = 0 To UBound(x)
    Debug.Print x(i)
Next

source:VBA Help

你可能感兴趣的:(VBA)