2011-02-13 109 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 

這裏的好處是,如果你的代碼被重置,那麼下次通過它們各自的函數訪問它們時,這些值會再次被重新初始化。

注意全局變量要避免儘可能多的,你應該總是在公立喜歡私人全局變量在可能的情況。必要時使用全局變量和公共全局變量,但僅在必要時使用。