为什么要在VBA或Excel中使用DIM语句?

所以DIM什么问题 ,但我找不到为什么要使用它。

据我所知,这三组代码之间没有区别:

 'Example 1 myVal = 2 'Example 2 DIM myVal as Integer myVal = 2 'Example 3 DIM myVal = 2 

如果我省略DIM代码仍然运行,并且在2或3个嵌套循环之后,当省略输出时,我看不出有什么区别。 来自Python,我喜欢保持我的代码清洁*。

那么为什么我需要用DIM来声明variables? 除了文体的关注,是否有技术上的理由使用DIM

*我也是懒惰的,并且没有声明variables的习惯。

任何没有声明的variables都是Varianttypes的。 尽pipe变体在某些情况下可能有用,但在不需要时应避免变体,因为它们:

  1. 速度较慢
  2. 使用更多的内存
  3. 更容易出错,无论是拼写错误,还是分配错误数据types的值

使用Dim可以使代码的意图显式化,并防止类似实际声明新variables的types错误。 如果你使用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

主持人,我正在努力,假设你将在未来对我充分尊重。

所有的局部variables都像所有语言一样存储在堆栈中(大部分参数都是函数)。 当一个子退出时,堆栈被返回到子执行之前的状态。 所以所有的内存都被释放 string和对象存储在对象pipe理器或stringpipe理器中的其他地方,堆栈包含一个指针,但vb在释放它之后进行处理。 将vbstring(bstr)设置为零长度可以释放除两个字节外的所有内容。 这就是为什么我们试图避免全局variables。

在脚本types程序中,无types编程有许多优点。 程序很短,使用的variables很less,因此内存和速度无关紧要 – 速度会很快。 随着程序变得越来越复杂,这很重要。 VB是为无types编程和types编程而devise的。 对于大多数的Excelmacros,无types编程是好的,更具可读性。 Vbscript只支持无types编程(你可以把它粘贴到vba / vb6中)。