VBA를 시작하시고자 한다면 반드시 도움말을 찾아가며 익혀가시는 것에 익숙해 지셔야 합니다.
아래의 출처: VBA도움말에서
범위와 가시성 설명
범위는 변수, 상수, 프로시저를 다른 프로시저에서 사용할 수 있다는 것을 말합니다. 프로시저 수준, private 모듈 수준, public 모듈 수준 등 세 범위로 나뉩니다.
변수를 선언할 때 범위를 결정하십시오. 범위가 다른 변수들 사이에서 이름 충돌 오류를 방지하기 위해 변수는 명시적으로 선언하는 것이 좋습니다.
프로시저 수준 범위 정의
프로시저 안에서 선언된 변수나 상수는 그 프로시저 밖에서는 보이지 않습니다. 변수가 선언된 프로시저에서만 그 변수를 사용할 수 있습니다. 다음 보기에서 첫 번째 프로시저는 문자열이 들어 있는 메시지 상자를 표시합니다. 변수 strMsg는 첫 번째 프로시저에 한정되었기 때문에 두 번째 프로시저는 공백 메시지 상자를 표시합니다.
Sub LocalVariable() Dim strMsg As String strMsg = "이변수는이프로시저외부에서는사용할수없습니다." MsgBox strMsgEnd SubSub OutsideScope() MsgBox strMsgEnd Sub
Private 모듈 수준 범위 선언
모듈의 선언부에 모듈 수준 변수와 상수를 정의할 수 있습니다. 모듈 수준 변수는 public 또는 private이 될 수 있습니다. public 변수는 프로젝트에 있는 모든 모듈의 모든 프로시저에서 사용할 수 있습니다. private 변수는 그 모듈의 프로시저에서만 사용할 수 있습니다. 기본적으로 선언부에 Dim 문으로 선언된 변수는 private 범위를 갖습니다. 그러나 Private 키워드를 변수 앞에 놓으면 코드의 범위가 명확해 집니다.
다음 보기에서 문자열 변수 strMsg는 모듈에 정의된 어느 프로시저에서나 사용할 수 있습니다. 두 번째 프로시저가 호출되면 대화 상자에 문자열 변수 strMsg의 내용이 표시됩니다.
' 모듈의선언부에다음코드를추가합니다.Private strMsg sAs StringSub InitializePrivateVariable() strMsg = "이변수는이모듈외부에서는사용할수없습니다. "End SubSub UsePrivateVariable() MsgBox strMsgEnd Sub
메모 표준 모듈 또는 클래스 모듈에 선언된 Public 프로시저는 참조하는 프로젝트 어디에서나 사용할 수 있습니다. 모듈의 모든 프로시저 범위를 현재 프로젝트로 제한하려면 모듈의 선언부에 Option Private Module 문을 추가하십시오. Public 변수와 프로시저는 현재 프로젝트에 있는 다른 프로시저에서는 사용할 수 있으나 참조하는 프로젝트에서는 사용할 수 없습니다.
Public 모듈 수준 범위 정의
모듈 수준 변수를 public으로 선언하면 프로젝트의 모든 프로시저에서 사용할 수 있습니다. 다음 보기에서 문자열 변수 strMsg는 프로젝트의 모든 모듈에 있는 어느 프로시저에서나 사용할 수 있습니다.
' 모듈의선언부에포함합니다.Public strMsg As String
이벤트 프로시저를 제외한 모든 프로시저는 public이 기본입니다. Visual Basic이 이벤트 프로시저를 만들 때 Private 키워드가 프로시저 선언 앞에 자동으로 삽입됩니다. 다른 모든 프로시저에서 프로시저를 public으로 설정하지 않으려면 프로시저를 Private 키워드로 선언해야 합니다.
참조하는 프로젝트의 표준 모듈이나 클래스 모듈에 정의된 Public 프로시저, 변수, 상수를 사용할 수 있습니다. 그러나 먼저 정의된 프로젝트에 대한 참조를 설정해야 합니다.
폼 모듈이나 보고서 모듈 같이 표준 모듈이나 클래스 모듈이 아닌 곳에서 정의된 Public 프로시저, 변수, 상수는 참조하는 프로젝트에서 사용할 수 없습니다. 이 모듈이 있는 프로젝트에서는 private이기 때문입니다.
변수 선언
변수를 선언할 때는 대개 Dim 문을 사용합니다. 선언문은 프로시저 수준 변수를 만들기 위해 프로시저에 넣을 수 있습니다. 선언부에서 모듈의 맨 위에 넣어 모듈 수준 변수를 만들 수도 있습니다.
이 선언문이 프로시저 안에 나타나면 변수 strName은 그 프로시저에서만 사용될 수 있습니다. 선언문이 모듈의 선언부에 나타나면 변수 strName은 모듈의 모든 프로시저에서 사용할 수는 있지만 프로젝트의 다른 모듈에 있는 프로시저에서는 사용할 수 없습니다. 이 변수를 프로젝트의 모든 프로시저에서 사용할 수 있게 하려면 다음과 같이 Public 문을 앞에 놓으면 됩니다.
Public strName As String
변수 이름에 대한 자세한 내용은 Visual Basic 도움말에 있는 “Visual Basic 명명 규칙”을 참고하십시오.
변수는 Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String(가변 길이 문자열), String * length(고정 길이 문자열), Object 또는 Variant 형식으로 선언됩니다. 데이터 형식을 지정하지 않으면 Variant 데이터 형식이 기본값으로 정의됩니다. 또한 Type 문을 사용하여 사용자 정의 형식을 만들 수 있습니다. 데이터 형식에 대한 자세한 내용은 Visual Basic 도움말에 있는 “데이터 형식 요약”을 참고하십시오.
한 개의 문에 변수를 여러 개 선언할 수 있습니다. 데이터 형식을 지정하려면 각 변수에 대하여 데이터 형식을 포함시켜야 합니다. 다음의 문에서는 intX, intY, intZ 변수를 Integer 형식으로 선언됩니다.
Dim intX As Integer, intY As Integer, intZ As Integer
다음 에서는 intX 과 intY 변수는 Variant 형식으로 선언되고 intZ만이Integer 형식으로 선언됩니다.
Dim intX, intY, intZ As Integer
선언문에 항상 변수의 데이터 형식을 정할 필요는 없습니다. 데이터 형식을 생략하면 변수는 Variant 형식으로 지정됩니다.
Public 문 사용
Public 문을 사용하여 Public 모듈 수준 변수를 선언합니다.
Public strName As String
Public 변수는 프로젝트의 모든 프로시저에서 사용할 수 있습니다. Public 변수가 표준 모듈이나 클래스 모듈에 선언되었다면 Public 변수가 선언된 프로젝트를 참조하는 모든 프로젝트에서 사용할 수 있습니다.
Private 문 사용
Private 문을 사용하여 Private 모듈 수준 변수를 선언합니다.
Private MyName As String
Private 변수는 같은 모듈에 있는 프로시저만 사용할 수 있습니다.
메모 모듈 수준에서 사용될 경우 Dim 문은 Private 문과 같습니다. Private 문을 사용하여 코드를 쉽게 읽고 이해할 수 있습니다.
Static 문 사용
Dim 문 대신에 Static 문을 사용할 경우 선언된 변수는 호출 사이에 값을 유지합니다.