为什么我应该在VBA或Excel中使用DIM语句?

时间:2014-06-24 04:33:27

标签: excel vba excel-vba

所以有一个question on what DIM is,但我找不到为什么要使用它。

据我所知,我发现这三组代码没有区别:

'Example 1
myVal = 2

'Example 2
DIM myVal as Integer
myVal = 2

'Example 3
DIM myVal = 2

如果省略DIM代码仍然运行,并且在2或3个嵌套循环之后,我看到省略它们时输出没有区别。来自Python,我喜欢保持我的代码干净*。

那么为什么我需要使用DIM声明变量?除了风格问题之外,是否有使用DIM的技术原因?

*我也很懒惰而且没有宣布变量的习惯。

3 个答案:

答案 0 :(得分:10)

使用Dim可以明确显示代码的意图,并防止常见错误,例如拼写错误实际声明新变量。如果您在代码中使用Option Explicit On(我完全建议),Dim成为强制性的。

以下是未能使用Dim导致(可能是错误的)问题的示例:

myVar = 100

' later on...

myVal = 10      'accidentally declare new variable instead of assign to myVar

Debug.Print myVar     'prints 100 when you were expecting 10

代码可以帮助您避免错误:

Option Explicit

Dim myVar as Integer
myVar = 100

' later on...

myVal = 10    ' error: Option Explicit means you *must* use Dim

有关Dim和Option明确的更多信息,请访问:http://msdn.microsoft.com/en-us/library/y9341s4f.aspx

答案 1 :(得分:10)

在没有声明的情况下使用的任何变量都是Variant类型。虽然变体在某些情况下可能有用,但在不需要时应避免使用变体,因为它们:

  1. 慢一点
  2. 使用更多内存
  3. 通过拼写错误或指定错误数据类型的值
  4. ,更容易出错

答案 2 :(得分:5)

主持人,我正在努力,假设你在未来会给予我应有的尊重。

与所有语言(以及函数的大多数参数)一样,所有局部变量都存储在堆栈中。当子退出时,堆栈将返回到子执行之前的状态。所以所有的内存都被释放了。字符串和对象存储在对象管理器或字符串管理器中的其他位置,并且堆栈包含指针,但vb会在释放它之后进行查找。将vbstring(a bstr)设置为零长度可以释放除两个字节之外的所有字节。这就是我们试图避免全局变量的原因。

在脚本类型程序中,无类型编程具有许多优点。程序很短,使用的变量很少,因此内存和速度并不重要 - 它足够快。随着程序越来越复杂,它确实很重要。 VB专为无类型编程和类型编程而设计。对于大多数excel宏,无类型编程很好并且更具可读性。 Vbscript仅支持无类型编程(您可以将其粘贴到vba / vb6中)。