2011-02-13 105 views
6

在Excel 2003中,我该怎么声明全局变量和初始化他们只有一次,即打开工作簿时?正在初始化的全局变量在VBA

我有一个由几个宏使用的一些参数:路径输入文件,基本上是这样。此刻,我的代码看起来是这样的:

global path1, path2 as string 

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

然后,每当我需要使用文件1或文件2在子程序或功能,我插入到initPaths通话。但这似乎相当不雅;我希望能够只设置一次路径而不是重复。

+2

我看你已经接受了史蒂夫·约根森的回答常量(这是一个很好的),但*还要注意*在你原来的代码只`path2`将是一个String - `path1`将是一个变。要在同一行声明两个类型变量,需要为每个类型赋予类型,例如:`global path1 as string,path2 as string`。 – RolandTumble 2011-02-15 00:34:20

+0

我不敢相信我没注意到。是啊 - 他说 2011-02-17 01:25:01

回答

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 

这里的好处是,如果你的代码被重置,那么下次通过它们各自的函数访问它们时,这些值会再次被重新初始化。

注意全局变量要避免尽可能多的,你应该总是在公立喜欢私人全局变量在可能的情况。必要时使用全局变量和公共全局变量,但仅在必要时使用。