我很犹豫要不要问,但我找不到任何文档for VBA.
相关(但我不认为是骗人的):
-
C++ 全局变量什么时候创建? https://stackoverflow.com/questions/19618801/when-are-global-variables-created
- 在Java中,变量应该在函数的顶部声明,还是在需要时声明? https://stackoverflow.com/questions/1411463/in-java-should-variables-be-declared-at-the-top-of-a-function-or-as-theyre-ne
-
C++ 在函数顶部或在单独的作用域中声明变量? https://stackoverflow.com/questions/3773396/declare-variables-at-top-of-function-or-in-separate-scopes
- 以及最有可能相关的VB.NET 中的模块变量何时实例化? https://stackoverflow.com/questions/14366432/when-are-a-modules-variables-in-vb-net-instantiated
- 我也看了一下C# 程序员.SE https://softwareengineering.stackexchange.com/questions/113262/why-declare-variables-close-to-where-they-are-used.
我认为我使用“实例化”这个词是正确的,但如果我错了,请纠正我。实例化是什么时候创建变量并分配它所需的资源?所以在 VBA 中我看到有两种方法可以做到这一点。
一切都在顶部!
Public Sub ToTheTop()
Dim var1 As Long
Dim var2 As Long
Dim var3 As Long
var1 = 10
var2 = 20
var3 = var1 + var1
Debug.Print var3
End Sub
或者接近使用
Public Sub HoldMeCloser()
Dim var1 As Long
var1 = 10
Dim var2 As Long
var2 = 20
Dim var3 As Long
var3 = var1 + var1
Debug.Print var3
End Sub
我喜欢把它们放在更容易使用的地方,这样更容易记住它们是什么,而其他人可能想把它们全部放在一边。这是个人喜好。
但是,我想我记得在某处读过 VBE 通过子/函数并实例化all继续之前的变量还要别的吗。这表明没有正确的方法在 VBA 中执行此操作,因为变量作用域in time不要改变。不是其中的范围Private
vs Public
.
而在其他语言中,范围似乎可以根据位置而变化,因此具有最佳实践.
我已经搜索这个文档有一段时间了,但是无论我使用什么词都没有给我指明正确的方向,或者文档不存在。
根据参考文档 https://msdn.microsoft.com/en-us/library/ee440517(v=office.12).aspx,
当过程开始运行时,所有变量都被初始化。数值变量初始化为零,变长字符串初始化为零长度字符串(""),定长字符串用 ASCII 字符代码 0 或 Chr(0) 表示的字符填充。变体变量被初始化为空。用户定义类型变量的每个元素都被初始化,就像它是一个单独的变量一样。
当您声明对象变量时,会在内存中保留空间,但其值将设置为 Nothing,直到您使用 Set 语句为其分配对象引用为止。
这意味着无论变量声明在哪里声明,它的空间/内存都是在进入过程时分配的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)