为什么我要在VBA中确定变量的尺寸?

时间:2015-06-11 15:29:35

标签: vba memory-management

他们曾经说这是关于内存管理的。 但是,看看我发现未能对变量进行维度化的事情将默认为一个变量数据类型,它分配22个字节的内存。

我们只考虑一兆字节的内存。 1,000,000字节。 这意味着我需要45,454个变量来咀嚼单个MB的内存。大多数现代系统都有几GB的内存。所以问题是我真的应该关心为我的所有变量仔细设置正确的调光吗?或者按现代标准浪费时间?

2 个答案:

答案 0 :(得分:7)

内存使用只是令人愉快的副作用。我建议使用Option Explicit的真正原因是它允许编译器保护您免受编译和运行的编码错误,但不能按照您的意图执行操作。

示例1:它可以避免拼写错误变成意外灾难。

Dim variableNamedFoobar As String
variableNamedFoobar = "Something"

If varableNamedFoobar <> "Something" Then
    Debug.Print "Did you catch that? The compiler would..."
End If

如果您没有明确声明变量,编译器会愉快地为您提供一个22字节的空字符串来进行比较。

示例2:它还可以防止泄漏范围。考虑一个具有多个可变范围级别的庞大项目。希望你记住你的全局变量:

Private x As Integer

Private Sub First()
    'I remembered here that x is a global.
    x = 2
    Debug.Print x
    Second
    Debug.Print x
End Sub

Private Sub Second()
    'I forgot here.
    For x = 1 To 5
    Next x
End Sub

添加Dim x as Integer以用作循环计数器可确保其范围限定为Second()

示例3:它允许编译器检测类型不匹配。

Set foo = New Collection
foo.Add "Bar"
Debug.Print TypeName(foo)

'... 100 lines of code later...

foo = 6
Debug.Print TypeName(foo)

如果某处有Dim foo As Collection,则会出现编译时错误,告知您已经 foo并且您不应该将6分配给它

还有很多其他的例子可以让你用脚本(或更高版本)用隐式变量声明来射击自己。虽然这些示例很容易在上面的代码块的隔离中发现,但是它们中的任何一个都会导致在大型代码库中调试错误并且非常困难。做自己(以及可能需要稍后维护代码的每个人)帮忙并输入额外的代码行。

答案 1 :(得分:1)

我发现最有用的原因是能够立即看到变量和控件是什么(在Access中比Excel更多),以及只知道它应该是什么类型的变量。这对于查看代码的其他人来说非常有用,因为我已经继承了一些根本没有定义变量的项目,以及那些定义得非常好的项目,而后者肯定会让事情变得更容易。关于记忆,我不会说它并不重要但差别可以忽略不计,所以它是个人选择。