作者:iamlaosong
数据类型是对同一类数据的统称,如文本、日期、数值等。VBA里的数据类型有:字节型(Byte),整数型(Integer),长整数型(Long),单精度浮点型(Single),双精度浮点型(Double),货币型(Currency),小数型(Decimal),字符串型(文本型)(String),日期型(Date),布尔型(Boolean)。 VBA对数据类型的管控并不强,有一个Variant万金油类型,这种类型的变量干啥都行。此外,用Dim定义类型时,存在一个陷井,稍不注意就会掉落其中。
1、测试结果
通过测试发现,如果一条语句定义多个变量,只有最后一个变量有效果,比如下面的程序是不会报错的,也能实现其功能:
Sub tt()
Dim ss, a, b, c, d As Integer
a = 100
b = 200
c = a + b
ss = "sum=" & c
Cells(5, 1) = a
Cells(5, 2) = b
Cells(5, 3) = c
Cells(5, 4) = ss
a = 87654
b = 12348
c = a + b
ss = "sum=" & c
Cells(5, 5) = a
Cells(5, 6) = b
Cells(5, 7) = c
Cells(5, 8) = ss
End Sub
执行结果是正常的:
100 | 200 | 300 | sum=300 | 87654 | 12348 | 100002 | sum=100002 |
不过,如果定义写成:Dim ss, a, b, c As Integer,则会报“溢出”错误(c是整型)。
同样,如果定义写成:Dim a, b, c, ss As Integer,则会报“类型不匹配”错误(ss是整型)。也就是说,只对定义中最后一个变量进行管控,这一点从C语言转过来的人有点想不通。
2、真实含义
实际上Dim a, b,c,ss As Integer的意思是:
dim a, dim b, dim c, dim ss as integer
变量a、b、c没有类型说明,那么VB就会给你使用默认的类型Variant。
3、严格管控
要严格的进行变量类型管控,一次只能定义一个变量,也可以写成下列形式:
Dim a As Integer, b As Integer, c As Integer, ss As String
===========================
附:VBA中的数据类型
数据类型(名称) | 大小(字节) | 描述 |
Boolean | 2 | 逻辑值True或False |
Byte | 1 | 0到255的整数 |
Integer | 2 | –32,768到32,767的整数 |
Long | 4 | –2,147,483,648到2,147,483,647的整数 |
Single | 4 | 单精度浮点数值 负数:–3.402823E38到–1.401298E–45 正数:1.401298E–45到3.402823E38 |
Double | 8 | 双精度浮点数值 负数:–1.79769313486231E308到–4.94065645841247E–324 正数:4.94065645841247E–324到1.79769313486231E308 |
Currency | 8 | (放大的整数(译者:整数除以10000得到的数值,参见VBA帮助))使用在定点计算中: –922,337,203,685,477.5808到922,337,203,685,477.5807 |
Decimal | 14 | +/–79,228,162,514,264,337,593,543,950,335没有小数点; +/–7.9228162514264337593543950335小数点后有28位数字; 最小的非0数字是 +/–0.0000000000000000000000000001 |
Date | 8 | 从100年1月1日到9999年12月31日的日期 |
String(变长字符串) | 10字节+字符串长度 | 变长字符串最多可包含大约 20 亿 ( 2^31)个字符。 |
String(定长字符串) | 字符串长度 | 定长字符串最多可包含大约65,400 个字符。 |
Object | 4 | 对象变量用来引用Excel中的任何对象 |
Variant(带数字) | 16 | 最高范围到Double类型的任何数值 |
Variant(带字母) | 22字节+字符串长度 | 和变长字符串的范围一样 |
用户定义类型 (使用Type) | 成员所需的数值 | 每个成员的范围和它的数据类型的范围一致 |