为什么要在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都是Variant
types的。 尽pipe变体在某些情况下可能有用,但在不需要时应避免变体,因为它们:
- 速度较慢
- 使用更多的内存
- 更容易出错,无论是拼写错误,还是分配错误数据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中)。