티스토리 뷰


변수를 사용할 때 변수의 범위를 이해하는 것은 아주 중요합니다. 여기서 말하는 변수의 범위는 변수를 사용할 수 있는 접근성(Accessibility)와 변수의 수명(Life Time)을 의미하게 됩니다. 


변수의 범위는 4가지로 구분할 수 있습니다. 


- 프로시저 레벨 범위

- 모듈 레벨 범위

- 프로젝트 레벨 범위

- 글로벌 변수 범위





위의 그림에서 확인할 수 있듯이 가장 작은 범위는 프로시저 레벨이며, 가장 큰 범위는 글로벌 변수입니다. 


1) 프로시저 레벨 범위


프로시저 레벨 범위는 로컬변수라 많이 부릅니다. 모든 로컬 변수는 변수를 선언한 프로시저 혹은 변수 안에서만 사용이 가능합니다. 그리고 함수 혹은 프로시저가 종료가 되면 이 변수는 더이상 사용할 수 없습니다. 


아래의 코드는 프로시저 레벨 변수에 대한 예를 나타냅니다. iCount라는 변수는 로컬 변수로, 이 프로시저에서만 사용이 가능합니다. 


Sub ProduceVariableTest()


Dim iCountAs Integer

iCount= 2000

MsgBox "로컬 변수의 값 : " & iCount


End Sub



2) 모듈 레벨 변수


모든 프로시저 레벨의 변수는 선언된 모듈의 프로시저에서만 사용이 가능합니다. 하지만 모듈 자체에 선언이 된 변수는 어떨까요. 모듈 레벨의 변수는 모듈에 포함이 된 모든 프로시저나 함수에서 사용이 가능합니다. 모듈 레벨의 변수는 Workbook이 종료되기 까지 유지가 됩니다. 아래는 모듈 레벨의 변수의 예를 나타냅니다. iRow라는 변수는 모듈 레벨로 선언된 변수입니다. 


아래의 예제에서 볼 수 있듯이, iRow라는 변수는 sbProcedure1과 sbProcedure2 함수 모두 접근이 가능하고 사용이 가능합니다. 


Option Explicit


'모듈 레벨 변수

Dim lRow As Long


Sub sbProcedure1()

MsgBox "모듈 레벨 변수 : " & lRow

End Sub

Sub sbProcedure2()

MsgBox "모듈 레벨 변수 : " & lRow

End Sub 


3) 글로벌 레벨 변수


글로벌 레벨 변수는 프로젝트 내에서는 어디서든 사용이 가능합니다. 즉 선언된 Workbook내에서 사용하는 어떠한 모듈에서도, 사용자 폼(User Form)에서 사용이 가능하게 됩니다. 또한 Workbook이나 프로젝트 밖에서도 사용이 가능합니다. 글로벌 변수는 모듈의 최상단에 Public 키워드를 사용하여 선언을 합니다. 


아래의 예제는 글로벌 변수에 대한 예제입니다. iRow 변수는 어디서든 접근이 가능합니다. 


Option Explicit


'글로벌 레벨 변수

Public lRow As Long


Sub sbProcedure1()

lRow = 220

MsgBox "Example of a Public Level Variable " & lRow

End Sub 


Sub sbProcedure2()

MsgBox "Example of a Public Level Variable " & lRow

End Sub


4) 프로젝트 레벨 변수


프로젝트 레벨 변수는 프로젝트의 모듈들에서 변수 레벨에 대해서 따로 선언을 하지 않고 사용하고자 할 때 선언하는 변수입니다. 이를 위해서는 선언 영역의 가장 위쪽에 Option Private Module을 추가해야 합니다. 아래의 코드는 프로젝트 레벨 변수를 사용하는 방법입니다. 


'Code in the Module 1:


Option Explicit

Option Private Module


Public lRow As Long


Sub sbProcedure1()

lRow = 220

MsgBox “프로젝트 레벨 변수 :  ” & lRow

End Sub

'Code in the Module 2:


Sub sbProcedure2()

MsgBox “프로젝트 레벨 변수 :  ” & lRow

End Sub





이 글에서는 엑셀 매크로 VBA에서 사용할 수 있는 변수의 범위에 대해서 알아보았습니다. 


이 글이 도움이 되셨으면, 아래의 하트를 눌러주세요.




댓글