VBA中变量声明的性能优势?

时间:2009-03-19 20:43:07

标签: performance vba ms-access access-vba

在函数的开头标注变量并且在它们被使用之前声明它们是否有性能优势?

我在MS Access 2003中使用VBA。

实施例,

 Function f(y As Long) As Long
      Dim x As Long
      If y <> 0 Then
           x = 1000000
      End If
 End Function

经节

 Function f(y As Long) As Long
      If y <> 0 Then
           Dim x As Long
           x = 1000000
      End If
 End Function

4 个答案:

答案 0 :(得分:8)

VBA绝对没有区别。声明变量只会影响设计时调试(IDE将知道要显示的自动完成(intellisense))。在这种情况下,它根本不会影响性能。我也做了很多VBA宏,这是我注意到的一件事。

作为演示,只需尝试在Dim语句上设置断点,您就会发现它不允许您。这是因为该指令从未执行过,仅用于指导即时调试引擎。

希望有所帮助

答案 1 :(得分:2)

要添加Wadih M的答案,所有声明的变量都会在编译程序之前初始化,无论它们在程序中的位置如何。

要测试这个,尝试使用变量而不声明它(你使用Option Explicit,对吧?):

Option Explicit

Private Sub notDeclared()
    Dim x As Long

    Debug.Print x
    Debug.Print y
End Sub

返回“变量未定义错误”,断点为过程声明,即在执行任何代码之前,突出显示未声明的变量 y

答案 2 :(得分:1)

不像Wadih所回答的那样执行代码本身。

但是,维护代码的表现确实如此。 我会说大多数程序员都希望变量在函数的顶部定义。 像你提供的一个简单例子并不重要。但是代码中散布着变量声明的复杂函数会使它感到混乱。从而减慢了阅读和理解代码的时间。因此增加了维护所需的时间。

在循环中声明变量并且不打算进行变量也可能存在问题。因此,每次循环迭代都会重置变量。

代码本身的性能通常不如维护代码的性能那么重要。

答案 3 :(得分:0)

当您说“ VBA绝对没有区别”时,我认为您是错误的。例如,如果您运行此代码

Private Sub test2()
    zz = Timer
        For i = 1 To 100000000
            x = x + 1
        Next
    Debug.Print "No décalartion : " & Timer - zz
    yy = Timer
    Dim y As Long
        For i = 1 To 100000000
            y = y + 1
        Next
    Debug.Print "No décalartion : " & Timer - yy
End Sub

您将获得此结果

没有下注:3,746094 带有décalartion:1,855469

因此变量声明提高了性能

致谢