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

나는 Steve Jorgensen의 상수에 대한 대답을 이미 받아 들였지만 (좋은 점도있다.) 원래 코드에서'path2'만이 String이 될 것이다 --path1은 Variant가 될 것이다 . 같은 행에 두 개의 유형이 지정된 변수를 선언하려면 각각에 대해 유형을 제공해야합니다. 즉, 'global path1 as string, path2 as string'입니다. – RolandTumble

+0

나는 그것을 알지 못했다고 나는 믿을 수 없다. 그래 - 그가 말한 것

답변

13

예를 들어, 전역 변수가 아닌 상수가 원하는 것처럼 보입니다. 여기에 좋은 일이 있다는 것입니다

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 

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

당신이 정말로 값을 결정하는 코드를 사용하지만, 한 번만 초기화 할 필요가 있다면, 당신은 게으른 초기화를 사용할 수 있습니다 ... 코드가 재설정되면 값은 다음에 해당 함수를 통해 액세스 할 때 다시 초기화됩니다.

전역 변수는 가능한 한 피해야하며 가능한 경우 공개 변수보다 개인 전역 변수를 선호해야합니다. 필요한 경우에만 전역 및 공용 글로벌을 사용하십시오.

+0

아, 고마워! 전에는 상수에 대해 몰랐습니다. –