변수 범위는 크게 3가지로 나눌 수 있습니다. 그 3가지는 함수, 모듈, public 모듈 레벨 입니다. 변수를 어느 위치에 설정하느냐에 따라 참조할 수 있는 범위가 결정됩니다. “함수” 범위는 함수 내에 지정한 변수로 함수를 벗어난 곳에서는 참조를 할 수 없습니다. “모듈” 은 모듈 파일에 설정한 변수로 해당 모듈을 벗어난 곳에서는 참조를 할 수 없습니다. “public” 지시어가 붙은 변수는 어느 곳에서나 참조가 가능합니다. 각각 샘플을 통해서 어떻게 사용해야 하는지 알아 보도록 하겠습니다.
▼ 3가지 변수 범위에 대해 테스트 구조는 다음과 같습니다. Sheet1 에 ActiveX 버튼을 하나 만들어서 클릭 이벤트 발생시킵니다. 그리고 Module1 에 있는 함수 Sub1, Sub2 함수를 호출하는 것입니다.
▼ 모듈에 있는 2개의 함수는 다음과 같습니다. 이런 이벤트 호출 과정을 통해 변수의 범위를 테스트해 보려고 합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 변수 생명 주기 지정하는 방법, Static 정적 변수 사용법 ▶ 엑셀 VBA 연산자 사용해서 String 문자열을 합치기 ▶ 엑셀 VBA Option Explicit 문 변수선언 에러 적용하기 ▶ 엑셀 VBA 매개변수 전달 방식 ByRef, ByVal 의 차이점 ▶ 엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 |
▼ 첫 번째 함수 안에서 사용하는 지역 변수를 다른 함수에서 사용하는 경우입니다. 함수 안에 설정한 변수는 함수를 벗어난 곳에서는 사용할 수 없다고 했습니다. 그림과 같이 sub2 에서 sub1 에 있는 변수를 참조하려면 에러가 나겠죠. sub1 에 있던 str 변수의 생명주기는 sub1 함수가 끝나는 순간 사라지기 때문에 다른 함수에서 사용할 수가 없습니다.
▼ 이것을 해결하려면 두 번째 방법인 모듈 내에서 사용할 수 있도록 범위를 넓히는 것입니다. 함수를 벗어난 Module1 페이지 상단에 변수를 설정하는 것입니다. 그림과 같이 설정해 두면 sub2 에서도 참조가 가능하겠죠.
▼ 그런데 같은 모듈이 아닌 외부에서 str 변수를 참조하면 에러가 납니다. Sheet1 에서 변수를 참조하고 싶은데 에러가 난다면 어떻게 해야 할까요?
▼ “public” 지시어를 사용하는 것입니다. 그럼 str 변수는 Project 어느 곳에서도 참조가 가능하게 됩니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 변수 생명 주기 지정하는 방법, Static 정적 변수 사용법 ▶ 엑셀 VBA 연산자 사용해서 String 문자열을 합치기 ▶ 엑셀 VBA Option Explicit 문 변수선언 에러 적용하기 ▶ 엑셀 VBA 매개변수 전달 방식 ByRef, ByVal 의 차이점 ▶ 엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 Excel VBA 개발을 위한 개발 도구 탭 추가하기 (0) | 2023.07.01 |
---|---|
엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법 (0) | 2023.06.29 |
엑셀 VBA 매크로 함수로 공백 제거하기, Trim, RTrim, LTrim 함수 이용 (0) | 2023.06.28 |
엑셀 VBA 날짜 데이터를 비교하거나 연산하기 (0) | 2023.06.27 |
엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기 (3) | 2023.06.22 |
엑셀 VBA Cells 속성의 다양한 사용법 (0) | 2023.06.22 |
엑셀 VBA 마지막 행과 열의 수 찾기 (3) | 2023.06.22 |
엑셀 VBA 여러 시트 데이터 합치기 (18) | 2023.06.21 |