楼主是个初学者,在应用vba时遇到了dim方面的问题,查了很多资料后想把关于dim的这点儿知识简单整理出来
首先,从我遇到的问题作为切入点吧, (不得不承认我遇到的错误是很低级的)
具体的情境就不还原了,将问题抽象了出来,代码如下:
运行结果
可以看到integer1被初始化为了空值,integer2被初始化为0
楼主想当然的认为dim的同类型多变量声明方式为 dim 变量名1,变量名2 as type 这种形式,导致了错误
接下来,让我们先查看一下dim的语法
Dim [WithEvents]varname[([subscripts])] [As [New]type] [, [WithEvents]varname[([subscripts])] [As[New] type]] . . .
由此,正确的格式应为 Dim integer1 as Integer, integer2 as Integer
在我之前使用的方法中,integer1会被初始化为一个Variant类型的空值,可以随着对其的操作变成任意类型。integer2则会被正常的初始化为0.
在VBA中我们使用Dim语句进行变量的声明,像大部分编程语言一样,也分为局部与全局声明:在过程中使用即过程级别变量,模块顶部则为模块级别变量。
而Dim的使用方法,上面也提到过了,Dim[WithEvents] varname[([subscripts])] [As [New]type] [, [WithEvents]varname[([subscripts])] [As[New] type]] . . .
你可以在一行中声明多个类型的变量如: Dim string1 as String, integer1 as Integer, single1 as Single,但注意,若你如此 Dim integer1,integer2 as Integer,变量integer1只能会是Variant类型,即相当于Dim integer1 或者Dim integer1 as Variant。
在初始化值方面,Variant 变量被初始化为 Empty,具体类型的变量的各自独立进行初始化,例如String类型被初始化为"",Integer类型被初始化为0
最后提一句吧,网上看到有人说vba可以不声明变量,写出来就用即可。也确实是这样,在没有option explicit的情况下不会产生语法错误,但非常不建议这样做,Dim具体类型变量除了可以提高效率,还可以方便注释、让代码阅读起来更容易。所以还是建议尽可能使用dim声明变量,即便是一个Variant类型。
以下引用一位老师ZhouFfett的说法,证明声明与否在效率上的差别。