【发布时间】:2016-08-13 14:19:46
【问题描述】:
我有点犹豫,但我找不到VBA的文档。
相关(但我不认为是骗子):
- C++ When are global variables created?
- In Java, should variables be declared at the top of a function, or as they're needed?
- C++ Declare variables at top of function or in separate scopes?
- 和最可能相关的When are a module's variables in VB.NET instantiated?
- 我还看了C# on programmers.SE。
我认为我使用“实例化”这个词是对的,但如果我错了,请纠正我。 实例化是什么时候创建一个变量并分配它所需的资源?所以在 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 通过子/函数并实例化所有变量,然后再进行任何其他操作。这将表明在 VBA 中没有正确的方法可以做到这一点,因为变量范围及时不会改变。不是Private 与Public 中的范围。
而在其他语言中,范围似乎可以根据位置而改变,因此有一个最佳实践。
我一直在搜索此文档一段时间,但无论我使用什么词都没有为我指明正确的方向,或者文档不存在。
【问题讨论】:
-
我同意彼得的回答和托马斯的说法,即普遍接受的做法是在过程的顶部声明变量。 “全局”变量必须位于模块的顶部,在任何过程之前。 VBA 识别的唯一“范围”是“全局”(公共,模块级),模块级(私有,模块级)与过程级。没有“块范围”,例如在 If 中。
-
"Instantiated" 是关于正在创建的对象,我会避免在其他上下文中使用它;我相信正确的词应该是“初始化”。