Computer >> 컴퓨터 >  >> 문제 해결 >> Windows 오류

VBA(Visual Basic for Applications) '첨자 범위 초과' 오류 9 해결 방법

Visual Basic for Applications(VBA)는 마이크로소프트가 개발한 Visual Basic 프로그래밍 언어의 구현체입니다. VBA는 사용자 정의 함수(UDF) 활성화, 업무 자동화, DLL을 통한 WinAPI 접근 등 다양한 용도로 활용됩니다. 그러나 최근 들어 특정 명령을 실행하려고 할 때 "첨자 범위 초과(Subscript Out of Range), 오류 9" 메시지가 나타나며 실행되지 않는다는 보고가 많이 접수되고 있습니다.

VBA(Visual Basic for Applications)  첨자 범위 초과  오류 9 해결 방법

VBA에서 "첨자 범위 초과" 오류가 발생하는 원인

여러 사용자로부터 수많은 문제 보고를 받은 후, 저희는 해당 문제를 심층적으로 조사하여 완전히 해결할 수 있는 솔루션을 마련했습니다. 아울러 이 오류가 발생하는 주요 원인도 파악하여 아래와 같이 정리했습니다.

  • 존재하지 않는 요소: 명령문에서 존재하지 않는 요소를 참조했을 가능성이 있습니다. 첨자가 허용 범위보다 크거나 작은 경우, 또는 해당 시점에 배열에 차원이 아직 할당되지 않은 경우 이 오류가 발생할 수 있습니다.
  • 정의되지 않은 요소: 코드에서 배열의 요소 수를 지정하지 않았을 수 있습니다. 배열의 요소 수는 반드시 "Dim" 또는 "ReDim" 명령을 통해 정의해야 합니다.
  • 잘못된 컬렉션 멤버: 존재하지 않는 컬렉션 멤버를 참조했을 수 있습니다. 컬렉션 멤버에 대한 참조가 잘못되면 이 오류가 트리거됩니다.
  • 축약형 스크립트: 첨자의 축약형(shorthand) 형태를 사용하면서 유효하지 않은 요소를 암시적으로 지정했을 수 있습니다. 반드시 유효한 키 이름을 사용해야 합니다.

이제 문제의 본질에 대한 기본적인 이해를 하셨으니, 해결 방법으로 넘어가겠습니다. 충돌을 방지하려면 아래에 소개된 순서대로 하나씩 적용하시기 바랍니다.

해결 방법 1: 배열 확인하기

배열 요소에 잘못된 값을 정의했을 가능성이 있습니다. 따라서 배열 요소에 정의한 값을 다시 한번 확인하고 올바른 값인지 검증하는 것이 좋습니다. 또한 배열 선언 부분을 점검하여 상한과 하한이 올바른지 확인하세요. 배열이 재차원화(redimension)된 경우에는 LBoundUBound 함수를 사용하여 접근 범위를 조건화하는 것이 안전합니다. 인덱스가 변수인 경우에는 변수 이름의 철자도 꼼꼼히 확인하세요.

VBA(Visual Basic for Applications)  첨자 범위 초과  오류 9 해결 방법

해결 방법 2: 요소 수 지정하기

경우에 따라 코드에서 배열의 요소 수를 정의하지 않아 오류가 발생했을 수 있습니다. 이 경우 Dim 또는 ReDim 함수를 사용하여 배열의 요소 수를 명시적으로 지정하는 것이 좋습니다.

VBA(Visual Basic for Applications)  첨자 범위 초과  오류 9 해결 방법

해결 방법 3: 구문(Construct) 변경하기

이 오류는 사용자가 잘못되었거나 존재하지 않는 컬렉션 멤버를 지정할 때 흔히 발생합니다. 따라서 인덱스 요소를 직접 지정하는 대신 "For Each...Next" 구문을 사용하여 컬렉션을 순회하는 방식으로 접근하는 것이 좋습니다.

VBA(Visual Basic for Applications)  첨자 범위 초과  오류 9 해결 방법

해결 방법 4: 키 이름 및 인덱스 확인하기

경우에 따라 첨자의 축약형을 사용하면서 유효하지 않은 요소를 지정했을 수 있습니다. 이때는 컬렉션에 대해 유효한 키 이름인덱스를 사용하는 것이 좋습니다.

VBA(Visual Basic for Applications)  첨자 범위 초과  오류 9 해결 방법