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

4 excel vba excel-vba

因此,有一个上问题什么 DIM的,但我无法找到我为什么要使用它.

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

'Example 1
myVal = 2

'Example 2
DIM myVal as Integer
myVal = 2

'Example 3
DIM myVal = 2
Run Code Online (Sandbox Code Playgroud)

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

那么为什么我需要声明变量DIM除了风格问题,是否有技术理由使用DIM

*我也懒惰,并且没有宣布变量的习惯.

Mat*_*ugh 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
Run Code Online (Sandbox Code Playgroud)

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

Option Explicit

Dim myVar as Integer
myVar = 100

' later on...

myVal = 10    ' error: Option Explicit means you *must* use Dim
Run Code Online (Sandbox Code Playgroud)

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

  • 既然你永远不会犯错并且不关心性能,那么你永远不应该声明你的变量.我们其他人从编译器的帮助中受益. (13认同)

chr*_*sen 10

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

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

  • @phd443322的应用,我应该在摆出之前阅读这些评论.我鼓励你发表你的理由充分的论据作为答案.其他人会欣赏它,即使OP没有. (3认同)
  • ++克里斯.还值得一提的是,某些`Variant`类型是由编译器在运行时编写的,它可能并不总是你想象的那样.[***非常好的跟进***](http://stackoverflow.com/questions/21386768/why-am-i-having-issues-assigning-a-range-to-an-array-of-variants ) (2认同)

phd*_*322 5

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

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

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

  • `dynamic typing` vs`静态打字`是确切的术语.无类型意味着变量没有类型,这是不正确的. (3认同)