Visual Basic/数据类型
Visual Basic 中的数据类型可以分为三类
- 原生: 编译器直接理解的类型,无需程序员提供帮助
- 用户定义: 通常称为 UDT,代表用户定义类型,对应于 Pascal 记录或 C 结构体
- 类: Visual Basic 中面向对象编程的基础。 类包括窗体、加载项和数据库设计器。
如果你正在使用 Excel VBA,请记住 VBA 本质上是 VB6,因此这些规则适用。
本节适用于 Visual Basic 的版本 7 及更高版本(即 VB.NET)。
内置类型包括
Visual Basic 类型 | 公共语言运行时类型结构 | 名义存储分配 | 值范围 |
---|---|---|---|
布尔型 | 布尔型 | 取决于实现平台 | True 或 False |
字节 | 字节 | 1 字节 | 0 到 255(无符号) |
字符(单个字符) | 字符 | 2 字节 | 0 到 65535(无符号) |
日期 | DateTime | 8 字节 | 公元 0001 年 1 月 1 日 0:00:00(午夜)到公元 9999 年 12 月 31 日 11:59:59 PM |
十进制 | 十进制 | 16 字节 | 0 到 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † 无小数点;0 到 +/-7.9228162514264337593543950335 有 28 位小数; 最小的非零数是 +/-0.0000000000000000000000000001 (+/-1E-28) † |
双精度浮点数(双精度浮点数) | 双精度 | 8 字节 | -1.79769313486231570E+308 到 -4.94065645841246544E-324 † 负值; 4.94065645841246544E-324 到 1.79769313486231570E+308 † 正值 |
整数 | Int32 | 4 字节 | -2,147,483,648 到 2,147,483,647(有符号) |
长整数(长整数) | Int64 | 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (9.2...E+18 †)(有符号) |
对象 | 对象(类) | 32 位平台上为 4 字节 64 位平台上为 8 字节 |
任何类型都可以存储在 Object 类型的变量中 |
SByte | SByte | 1 字节 | -128 到 127(有符号) |
短整数(短整数) | Int16 | 2 字节 | -32,768 到 32,767(有符号) |
单精度浮点数(单精度浮点数) | 单精度 | 4 字节 | -3.4028235E+38 到 -1.401298E-45 † 负值; 1.401298E-45 到 3.4028235E+38 † 正值 |
字符串(可变长度) | 字符串(类) | 取决于实现平台 | 0 到大约 20 亿个 Unicode 字符 |
无符号整数 | UInt32 | 4 字节 | 0 到 4,294,967,295(无符号) |
无符号长整数 | UInt64 | 8 字节 | 0 到 18,446,744,073,709,551,615 (1.8...E+19 †)(无符号) |
用户定义(结构体) | (继承自 ValueType) | 取决于实现平台 | 结构体中的每个成员都具有由其数据类型确定的范围,与其他成员的范围无关 |
无符号短整数 | UInt16 | 2 字节 | 0 到 65,535(无符号) |
本节适用于 Visual Basic 的版本 6 及更早版本,这是一个 较旧 的版本。
示例
Dim a as Byte
Dim i as Integer
Dim x,y as Long 'Define two variables. Note that only the last variable will be a long integer.
现在这些变量只能存储整数值(无小数)。 长整型可以存储比整型更大的数值范围,但它们占用更大的 RAM 空间。
类型 | 存储 | 值范围 |
---|---|---|
字节 | 1 字节 | 0 到 254 |
整数 | 2 字节 | -32,768 到 32,767 |
长整数 | 4 字节 | -2,147,483,648 到 2,147,483,647 |
一些你需要了解的函数:Int()
Int() 将十进制值转换为整数值
Dim i as Integer
i=Int(3.9)
Print i 'Prints 3
这些数据类型可以存储小数。 “双精度” 相对于 “单精度” 类似于 “长整数” 相对于 “整数”。
类型 | 存储 | 值范围 |
---|---|---|
单精度 | 4 字节 | -3.402823E+38 到 -1.401298E-45 负值 1.401298E-45 到 3.402823E+38 正值。 |
双精度 | 8 字节 | -1.79769313486232E+308 到 -4.94065645841247E-324 负值 4.94065645841247E-324 到 1.79769313486232E+308 正值。 |
一些有用的函数:Round()
Round() 将小数四舍五入到程序员所需的特定小数位数。 第一个参数应该是要四舍五入的小数值。 第二个参数指定所需的位数,例如
Dim pi as Double
pi=3.141592653589
pi=Round(pi,2) 'Rounds off 3.141592653589 to only two decimal digits
Print pi 'Prints 3.14
字符串是字符数组。 例如
Dim a As String
a = "This is a string"
字符串可以使用 “&” 运算符连接(连接在一起形成一个新的字符串)。 例如,
dim b as String
b = "Wiki" & "book" & "s"
Print b 'Prints "Wikibooks"
一个普通的字符串变量占用 10 个字节的 RAM,加上字符串的大小,最多可以容纳 20 亿个字符!
一些常用的内置字符串常量:vbTab、vbCrLf
vbTab 包含一个字符串,它与键盘上的 Tab 键的作用相同,而 vbCrLf 创建一个回车和换行符(类似于 Enter 键)
Print "Jack:" & vbTab & "1 pie" & vbCrLf & "me:" & vbTab & "10 pies"
将打印
Jack: 1 pie me: 10 pies
要在字符串中包含特殊字符和引号,可以使用 Chr() 函数
Dim a As String
Print "A quotation mark: [" & Chr(34) & "]"
a = "Replace 'apostrophes' for quotation marks"
Replace( a, "'", Chr(34) )
Print a
一些字符串函数:Str()、Val()、inStr()、Mid()、Replace()、Trim()
事实上,有大量的内置字符串操作函数可用。 但现在,我将只介绍两个:Str() 和 Val()。
Str() 将任何数值转换为字符串值,而 Val() 将字符串值转换为数值(只有在可转换时)。
Dim MyString As String
Dim MyNumber As Single
MyString=Str(300) 'converts a number into a string
MyNumber=Val("300") 'converts a string into a number
即使你不进行转换,也不会遇到类型不匹配错误。 然而,建议使用显式类型转换,因为这更容易调试。
即使你做了准备,也可能遇到几乎不可能调试的问题,因为 VB 拒绝转换某些内容,并且拒绝告诉你到底是什么。 VB 非常敏感,并且在最意想不到的时候抛出异常。
结构体类型定义示例
Type E2Point
x As Double
y As Double
End Type
Sub Test()
Dim MyPoint As E2Point
Dim MyPoint2 As E2Point
MyPoint.x = 4
MyPoint.y = -5
MyPoint2 = MyPoint 'Make a copy
MyPoint2.x = 3
MyPoint2.y = -6
Debug.Print MyPoint.x, MyPoint.y '4, -5: not overriden with 3 and -6
Debug.Print TypeOf MyPoint Is E2Point 'True
Debug.Print TypeOf MyPoint Is Object 'False
End Sub
类型必须在过程之外定义。
结构体类型变量不是对象。
链接
- Type 语句,Office 2013,msdn.microsoft.com
- Type 语句 在 Visual Basic for Applications 参考中,msdn.microsoft.com
枚举类型定义示例
Enum Colors
Red '=0
Green '=1
Blue '=2
End Enum
Enum Colors2
Red2 = 1
Green2 '=2
Blue2 '=3
End Enum
Sub Test()
Debug.Print Red, Green, Blue
Debug.Print Red2, Green2, Blue2
Dim MyVar As Colors 'Ends up being typed as Long
MyVar = 8 'Does not lead to an error: no restriction on values
End Sub
链接
- Enum 语句,Office 2013,msdn.microsoft.com
- Enum 语句 在 Visual Basic for Applications 参考中,msdn.microsoft.com
要了解变量的类型,可以使用 “TypeOf ... Is ...” 测试。 测试的类型只能是对象类型和结构体类型,但测试可以应用于任何变量,无论是整数、字符串还是对象类型。
TypeOf 在 Excel 中的示例
Set MyVar = Selection
Debug.Print "Selection is an object: " & TypeOf MyVar Is Object
Debug.Print "Selection is a range: " & TypeOf MyVar Is Range
Debug.Print "Sheets is of type Sheets: " & TypeOf Sheets Is Sheets
MyStr = "Hello"
Debug.Print "Text is an object: " & TypeOf MyStr Is Object
If TypeOf MyVar Is Range Then
Set MyCells = MyVar.Cells
End If
使用 “Select Case True” 的示例测试
Set MyVar = new Collection
Select Case True
Case TypeOf MyVar is Range
Debug.Print "Range"
Case TypeOf MyVar is Collection
Debug.Print "Collection"
Case Else
Debug.Print "Other cases"
End Select
你可以使用 IsObject 和 TypeName 函数进一步了解类型
Debug.Print IsObject(Selection) 'True
Debug.Print IsObject("Hello") 'False
Debug.Print TypeName("Hello") 'String
Debug.Print TypeName(4) 'Integer
Debug.Print TypeName(3.5) 'Double
Debug.Print TypeName(Selection) 'Range
链接
- If...Then...Else 语句 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- TypeName 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- IsObject 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- IsArray 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- IsDate 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- IsNumeric 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
- IsNull 函数 在 Visual Basic for Applications 参考中,msdn.microsoft.com
上一页:文件 | 目录 | 下一页:过程和函数 |