VBA中变量定义,只能将’as’之前的那个变量赋予类型

VBA由于语法的不严谨,所以导致了某些时候,看起来已经被分配了数据类型的变量,实际上并没有被分配数据类型。

下面以Single数据类型为例,Single数据类型可以容纳下8位。也就是123456.7

我们看下面的例子文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Sub text()文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Dim a, b As Single文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Dim aa As Single文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Dim T1 As Single文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Dim T2 As Single文章源自原紫番博客-https://www.yuanzifan.com/4532.html

T1 = 1234656.7889文章源自原紫番博客-https://www.yuanzifan.com/4532.html

T2 = 123465.789文章源自原紫番博客-https://www.yuanzifan.com/4532.html

a = 1234567.89文章源自原紫番博客-https://www.yuanzifan.com/4532.html

aa = 1234657.89文章源自原紫番博客-https://www.yuanzifan.com/4532.html

Debug.Print "a="; a

Debug.Print "aa="; aa

a = T1 + T2

Debug.Print "a="; aa

End Sub

+++++++++++

上述代码的打印结果如下:

a= 1234567.89

aa= 1234658

a= 1234658

这里有一个比较奇怪的一点,就是变量a和aa  被赋予了同样的值1234567.89。但是输出的时候,

a= 1234567.89

aa= 1234658

这是因为,定义时候的不同:

Dim a, b As Single  ‘此定义中,实际上只给变量b定义成了Single类型的变量,变量a的实际类型为empty(即没有任何类型)

Dim aa As Single  ‘此定义中,aa被定义成了Signle类型的变量。即在变量定义中,只有as之前的变量,才会被赋予成as之后的那个类型。

你写100个变量,用逗号分割,再as String,实际上只是给最后一个变量赋予了String类型,其他都没有赋予。

这就可以解释,为什么同样的赋值,a和aa的值就变得有所不同。

但是,再看T1和T2,两个都是Single类型,将这个两个值相加,再把结果赋给aa,那么aa登时就变成了single类型。输出结果于是只能包含8位。

所以,在大量定义变量的时候,不要使用逗号,而要使用多行。

 

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证