谈谈VBA中简化的变量声明

2023-11-08 15:25:15 浏览数 (2)

标签:VBA

在使用VBA编写代码时,你可以不用强制声明变量,前提是在代码前面没有语句:Option Explicit,或者取消选择了选项中的“要求变量声明”。然而,我们不提倡这种做法,因为会造成代码的混乱,当写错变量名时不容易找出哪里出错了。

在编写VBA代码时,声明变量并指出具体的变量类型是一种非常好的编程习惯。

如果你只使用Dim语句后接变量名:

代码语言:javascript复制
Dim x

那么x会被认为是“Variant”类型的变量。这样也不好,因为这样的变量会在内存中占据更多的空间,并且在访问这样的变量以对其执行操作时往往会进行类型转换,从而导致代码运行变慢。

因此,在声明变量时,好的方式是严格定义该变量的类型,例如:

代码语言:javascript复制
Dim lng As Long
Dim intNum As Integer
Dim curMon As Currency
Dim str As String
Dim dbl As Double
Dim sng As Single
Dim lnglng As LongLong
Dim vr As Variant

也可以在一行中声明多个变量,例如可以通过逗号分隔声明来缩短上面的内容,但这只会节省一些“Dim”:

代码语言:javascript复制
Dim i As Long, j As Long, count As Long

注意,我们不可以图省事,而将上述声明写为:

代码语言:javascript复制
Dim i, j, count As Long

这样,只是count被声明为Long型,而i和j则被声明为了Variant型。

此外,在声明Integer型变量时,我们通常将其声明为Long型,因为“VBA将所有整数值转换为Long类型,即使它们被声明为integer类型。因此,使用Integer变量不再有性能优势;事实上,Long变量可能会稍微快一点,因为VBA不必转换它们。”(msdn)

实际上,我们可以用简写符号来声明变量,对于上述代码可以进行如下声明:

代码语言:javascript复制
Dim i&, j&, count&

因为Long类型的声明字符是&。

当然,其他类型也有相对应的简写符号,对于本文开头的一系列声明语句,我们可以写为:

代码语言:javascript复制
Dim lng&, intNum%, curMon@, str$, dbl#, sng!, lnglng^, vr

作用完全相同,但语句要短很多。

虽然这样做很方便,但存在的一个缺点是不如As语句后加上变量类型更加直观,不过,对于熟悉VBA的人来说,还是很方便的。

就这么多,你还有补充的吗?

0 人点赞