我犹豫不决,但没有文件可以找到的VBA 。
相关(但我不认为是欺骗):
我认为我正在使用“实例化”这个词,但如果我错了,请纠正我。 实例化是指创建变量并分配所需资源的时间?所以在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
vs Public
中的范围。
而在其他语言中,范围似乎可以根据展示位置进行更改,因此最佳实践。
我一直在寻找这个文档已经有一段时间了,但是我正在使用的任何单词并没有指向正确的方向,或者文档不存在。
答案 0 :(得分:3)
当程序开始运行时,所有变量都被初始化。数字变量初始化为零,可变长度字符串初始化为零长度字符串(""),固定长度字符串填充由ASCII字符代码0表示的字符或者Chr(0)。变量变量初始化为Empty。用户定义的类型变量的每个元素都被初始化,就像它是一个单独的变量一样。
声明对象变量时,空间在内存中保留,但在使用Set语句为其分配对象引用之前,其值将设置为Nothing。
这意味着无论陈述变量声明的位置如何,在输入过程时,它的空间/内存都是分配。
答案 1 :(得分:1)
变量,常量和对象以这样的方式实例化:
在模块级别,它们在应用程序启动时被实例化,无论它们是被声明为public
,private
还是static
在过程级别(子/函数),它们在执行过程时被实例化。
您必须明白,虽然它确实有“编译器”,但 vba不是真正的编译语言。编译器是一种语法检查器,用于检查代码中的错误,以便在运行时不会遇到错误。在MS访问中,编译器会生成一些名为 p-code 的内容,它是编译和解释代码的组合。
根据经验:
始终使用option explicit
语句(为此配置编译器)
总是在模块或子/函数顶部的一个地方声明变量,并且为了清楚起见,避免在代码中间执行。这不会以任何方式影响性能。
避免使用variant
数据类型
值得阅读的文档: Understanding the Lifetime of Variables(官方mSDN),Visual/Access Basic Is Both a Compiler and an Interpreter(官方MS)和Declaring variables。你可能也会发现我最近给出的有关vba garbage collector
的答案