在VBA中初始化全局变量

时间:2011-02-13 23:47:34

标签: vba excel-vba excel

在Excel 2003中,如何声明全局变量并仅将其初始化一次,即何时打开工作簿?

我有一些宏使用的参数:输入文件的路径,基本上。目前,我的代码如下所示:

global path1, path2 as string

sub initPaths
    path1 = 'path\to\file1'
    path2 = 'path\to\file2'
end sub

然后,每当我需要在子程序或函数中使用file1或file2时,我都会调用initPaths。但这似乎相当不优雅;我希望能够只设置一次路径而不是重复路径。

1 个答案:

答案 0 :(得分:13)

从您的示例中看,您想要的是常量,而不是全局变量。

Public Const PATH1 = "path\to\file1"
Public Const PATH2 = "path\to\file2"

如果您确实需要使用代码来确定值,但只想初始化它们一次,则可以使用延迟初始化...

Private mstrPath1 As String
Private mstrPath2 As String

Public Function Path1() As String
    if mstrPath1 = vbNullString Then
        ' Initialize mstrPath1 value here.
    End If
    Path1 = mstrPath1
End Function

Public Function Path2() As String
    if mstrPath2 = vbNullString Then
        ' Initialize mstrPath2 value here.
    End If
    Path2 = mstrPath2
End Function

这里的好处是,如果您的代码被重置,下次通过各自的功能访问时,这些值将再次重新初始化。

请注意,应尽可能避免全局变量,并且在可能的情况下,您应该始终优先考虑私有全局变量而不是公共变量。必要时使用全局变量和公共全局变量,但仅在必要时使用。