본문 바로가기
#4 VBA/#4.2 코딩문법

Option Explicit와 변수 선언 강제

by 이세계의엑셀 2025. 7. 30.
반응형

이 글은 VBA 코드 상단에 Option Explicit를 선언함으로써 변수 선언을 강제하고 실수를 방지하는 방법을 설명하여, 실무에서 발생할 수 있는 런타임 오류와 디버깅 시간을 최소화하기 위함이다.

Option Explicit의 개념과 필요성

Option Explicit는 모듈의 첫 줄에 선언하여 모든 변수를 명시적으로 선언하도록 강제하는 지시문이다. 선언하지 않은 변수를 사용하려 하면 컴파일 단계에서 Variable not defined 오류가 발생한다. 이는 오타·형식 오류를 조기에 발견하게 하므로 코드 안정성이 향상된다.

구분 Option Explicit 사용 Option Explicit 미사용
컴파일 시점 미선언 변수 검출 검출하지 못함
런타임 오류 감소 증가
디버깅 시간 단축 장기화
코드 신뢰성 높음 낮음

VBA에서 변수 선언을 강제하는 단계별 절차

  1. VBE(Visual Basic Editor)를 열고 도구 > 옵션 > 편집기 탭을 선택한다.
  2. 변수 선언강제(Require Variable Declaration) 체크박스를 활성화한다.
  3. 새로 생성되는 모든 모듈 상단에 자동으로 Option Explicit가 삽입된다.
  4. 기존 모듈에는 수작업으로 첫 줄에 Option Explicit를 추가한다.
' 모듈 예시
Option Explicit

Sub 변수선언예시()
    Dim i As Long
    Dim total As Double
    
    For i = 1 To 10
        total = total + i
    Next i
    MsgBox total
End Sub

변수 선언을 강제하지 않았을 때의 오류 사례

사례 1 — 오타로 인한 값 손실
totlatotal을 혼용하면, 변수 totlaVariant 형식으로 암묵적으로 생성되어 최종 합계가 0으로 출력된다.
Sub TotlaError()
    total = 0    ' Variant로 암시적 선언
    For i = 1 To 10
        totla = totla + i  ' 오타
    Next i
    MsgBox total           ' 0 출력
End Sub

이 오류는 런타임에서 정상 실행되어 문제를 뒤늦게 파악하게 된다. Option Explicit를 사용하면 컴파일 단계에서 즉시 경고가 발생하여 사고를 방지한다.

Option Explicit를 조직 표준으로 적용하기 위한 체크리스트

  • 버전 관리 레포지터리에 Pre-Commit Hook를 배치하여 Option Explicit 누락 시 커밋을 거부한다.
  • 코드 리뷰 템플릿에 “모든 모듈에서 Option Explicit가 선언되었는가?” 항목을 추가한다.
  • 표준 모듈, 폼 모듈, 클래스 모듈별 Option Explicit 자동 삽입 스니펫을 배포한다.
  • 사내 VBA 코딩 가이드라인에 변수명 접두사(Naming Conventions)와 함께 명시적으로 규정한다.

자주 묻는 질문(FAQ)

Q1. 이미 작성된 수백 개의 모듈에 일괄적으로 Option Explicit를 넣을 수 있는가?

가능하다. VBA 프로젝트를 Export File로 내보낸 후 PowerShell 또는 Python 스クリ프트로 첫 줄에 Option Explicit를 삽입하고 다시 가져오면 된다.

Q2. Variant로 선언해도 Option Explicit의 이점이 있는가?

있다. Variant라도 명시적 선언은 오타 검출에 기여하며 코드 의도를 분명히 한다.

Q3. Excel 365에서만 필요한가, 이전 버전에서도 필수인가?

모든 버전에서 권장된다. Excel 97 이후 모든 VBA 환경이 동일하게 지원한다.

Q4. 실행 속도에 영향이 있는가?

변수 형식이 명확해지므로 컴파일러가 최적화하기 쉬워져 미미하지만 긍정적 효과가 있다.

반응형

'#4 VBA > #4.2 코딩문법' 카테고리의 다른 글

변수의 범위(Public, Private)  (0) 2025.07.29
변수를 선언하는 Dim 키워드  (0) 2025.07.28
변수(Variable) 개념과 역할  (3) 2025.07.27