【发布时间】:2021-04-20 19:04:43
【问题描述】:
Dim x, y as Date
这两个代码语句有什么区别
Dim x as Date, y as Date
差异的实际结果是什么,我还缺少哪些其他隐藏的声明功能?
【问题讨论】:
标签: vba
Dim x, y as Date
这两个代码语句有什么区别
Dim x as Date, y as Date
差异的实际结果是什么,我还缺少哪些其他隐藏的声明功能?
【问题讨论】:
标签: vba
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
【讨论】:
Def语句; DefSng A-Z 使变量名为 A 到 Z 的类型为 Single。然而,这太可怕了,可以用来为杀人辩护。
Dim s$ 等同于 Dim s as String),我会放弃寻找快捷方式。将每个变量声明放在单独的行中,并在环境允许的情况下尽可能强地键入它们,这是一种很好的做法,并且可以使代码更清晰、更易于维护。
Dim x, y as Date
each 变量需要 As <Type>,因此在上面的示例中,只有 y 是 Date; x 是 Variant (未指定类型时的默认值)
Dim x as Date, y as Date
两个变量都是Dates,因为每个变量都有一个As。
【讨论】:
date_of_birth 变量,你可以给它分配任何东西(一个数字,一个字符串,一个对象引用),如果它是一个variant,如果它是一个Date,但是你肯定知道它有什么值是一个有效的日期,你永远不需要检查。变体的性能也低于类型化变量。
Dim MSDN 上的声明:msdn.microsoft.com/en-us/library/office/…
为了易读性,我通常喜欢在我用其他语言声明它们的同一行声明变量内容。有什么捷径可以做到这一点吗?
对于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)
上述方法可行,但当然仅如果函数的参数在此声明之前分配,任何对象变量都被实例化,等等。
我的意思是,虽然在某些情况下您可以这样做,但在绝大多数情况下这样做根本不切实际,为了保持一致性,我个人会建议不要使用这种内联声明和赋值。
【讨论】:
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(默认数据类型)
【讨论】: