在VBA中声明变量

时间:2015-01-30 14:43:15

标签: vba

Dim x, y as Date

这两个代码语句之间有什么区别

Dim x as Date, y as Date

差异的实用结果是什么?我遗漏了哪些其他隐藏的声明功能?

4 个答案:

答案 0 :(得分:4)

Dim x, y as Date

相当于:

Dim x 
Dim y as Date

,这相当于:

Dim x as Variant
Dim y as Date

当您省略变量的类型时,它会采用Variant类型

根据您的问题进行修改:

Dim a! ' same as Dim a as Short
Dim b@ ' same as Dim b as Currency
Dim c# ' same as Dim c as Double
Dim d$ ' same as Dim d as String
Dim e% ' same as Dim e as Integer
Dim f& ' same as Dim f as Long

参考:http://bytes.com/topic/visual-basic/answers/643371-declaration-shortcuts

答案 1 :(得分:3)

Dim x, y as Date
每个变量都需要

As <Type>,所以在上面的示例中,只有yDate; xVariant(未指定类型时的默认值)

Dim x as Date, y as Date

两个变量均为Dates,因为每个变量都有As

答案 2 :(得分:3)

  

为了易读性,我通常喜欢在同一行声明一个变量内容,我用其他语言声明它们。是否有任何捷径可以做到这一点?

对于Constant表达式,是:

Const i as Integer = 6
Const myName as String = "David Zemens"

对于动态变量,如果不使用冒号就不可能,即Dim i as Integer: i = 6,但冒号实际上被解释为换行符,所以这样做没有真正的优势

虽然在设计时分配已知的简单值可以通过这种方式完成,但如果你环顾四周,我会发现这在VBA编程中并不经常使用。相反,您通常会在模块/过程的顶部看到 ALL 声明,然后是那些需要初始值的变量的赋值语句。所有其他分配在运行时发生在代码中需要进行或更改分配的位置

Dim i as Integer
Dim x as Date
Dim y as Date

i = 1
x = DateValue(Now())

y = DateAdd("d", i, x)

MsgBox y

比较以下内容:

Dim i as Integer: i = 6

够简单吧?但是怎么样:

Dim i as Integer: i = SomeFunction(arg1, arg2, obj.Property1)

上述方法可行,但当然 ONLY 如果在此声明之前分配了函数的参数,则实例化任何对象变量等。

我所说的是,虽然在某些情况下你可以这样做,但在绝大多数情况下这样做根本不切实际,并且一致性,我个人建议反对那种在线声明&amp;分配

答案 3 :(得分:0)

    Dim x, y as Date
'Is the same as:
    Dim x as Variant
    Dim y as Date

现在

    Dim x as Date, y as Date
'Is the same as:
    Dim x as Date
    Dim y as Date

如果不为 VBA 变量声明数据类型,VBA 使用 Variant(默认数据类型)