엑셀 매크로 오류가 날 때 순서대로 확인하는 방법

얼마 전까지 잘 돌던 엑셀 자동화 파일이 갑자기 멈췄다는 연락을 받았다. 버튼을 눌러도 반응이 없어서 코드를 고쳐야 하나 싶었는데, 실제 원인은 메일로 다시 받은 파일에 붙은 보안 차단 표시였다. 엑셀 매크로 오류는 화면에 보이는 증상이 비슷해도 원인이 다르다. 파일 자체에 매크로가 없는지, 실행이 막힌 건지, 실행 도중 코드가 멈춘 건지부터 나누면 손댈 곳이 좁아진다.
파일 형식과 실행 환경부터 확인한다
먼저 파일 이름 끝을 본다. 일반 통합 문서인 .xlsx는 VBA 매크로 코드를 저장하지 못한다. 원래 .xlsm이던 파일을 .xlsx로 저장했다면 버튼 모양은 남아 있어도 실행할 코드가 사라졌을 수 있다. 이때 확장자만 .xlsm으로 바꿔도 코드는 돌아오지 않는다. 매크로가 들어 있던 원본이나 이전 버전을 찾아야 한다. .xlsm 또는 .xlsb 파일이라면 다음 단계로 넘어간다.
브라우저에서 파일을 열었다면 데스크톱 엑셀로 다시 연다. 웹용 엑셀은 매크로가 포함된 통합 문서를 표시할 수 있지만 VBA 매크로를 실행하지는 못한다. 파일을 내려받아 Windows용 엑셀에서 열고 Alt+F8을 눌러 실행할 매크로 이름이 보이는지 확인한다. 목록이 비어 있다고 바로 코드가 없다고 단정할 수는 없다. 매크로가 숨겨져 있거나 인수를 받는 코드일 수도 있으니, 필요하면 Alt+F11로 VBA 편집기를 열어 프로젝트 안의 코드를 확인한다.
보안 경고 문구에 따라 차단을 푼다
파일 위쪽에 노란색 ‘매크로를 사용할 수 없도록 설정했습니다’ 알림이 뜨는 경우와 빨간색 계열의 ‘보안 위험’ 알림이 뜨는 경우는 대응이 다르다. 전자는 출처를 확인한 뒤 해당 파일에서 콘텐츠 사용을 선택할 수 있다. 후자는 인터넷에서 받은 파일로 표시되어 버튼 자체가 없는 경우가 많다. 엑셀을 닫고 파일 탐색기에서 해당 파일을 마우스 오른쪽 버튼으로 눌러 속성의 일반 탭을 연다. 아래쪽에 ‘차단 해제’가 보이면, 보낸 사람과 파일 내용을 신뢰할 수 있을 때만 체크한 뒤 적용하고 다시 연다.
차단 해제 항목이 없거나 적용해도 그대로라면 엑셀의 파일 → 옵션 → 보안 센터 → 보안 센터 설정 → 매크로 설정을 확인한다. 다만 ‘모든 매크로 사용’으로 바꾸는 방식은 피하는 편이 낫다. 이후 여는 다른 파일까지 영향을 받기 때문이다. 반복해서 쓰는 업무 파일이라면 출처를 확인한 파일만 별도 폴더에 두고 신뢰할 수 있는 위치로 등록하는 방법이 있다. 다운로드 폴더 전체를 등록하면 그곳에 들어오는 다른 파일도 함께 신뢰하게 되니 범위를 좁혀야 한다. 회사 PC에서 설정이 회색으로 잠겨 있거나 차단이 계속된다면 조직의 보안 정책이 적용됐을 수 있다. 이 경우 담당 부서에 파일과 표시 문구를 전달하는 게 빠르다.
버튼만 안 된다면 연결된 매크로를 본다
Alt+F8에서 매크로를 직접 실행했을 때는 되는데 시트의 버튼만 먹통이라면 보안 설정을 다시 건드릴 이유가 없다. 버튼을 마우스 오른쪽 버튼으로 눌러 ‘매크로 지정’을 열고, 현재 통합 문서의 올바른 이름에 연결돼 있는지 확인한다. 파일을 복사하거나 이름을 바꾼 뒤 예전 통합 문서 이름이 연결에 남아 있는 경우가 있다. 수정 전에는 파일을 복사해 두는 게 편하다. 버튼 연결을 바꿨다가 다른 작업까지 영향이 생기면 원본과 비교할 수 있다.
반대로 Alt+F8에서도 실행되지 않으면 오류 문구를 그대로 적어 둔다. ‘매크로를 실행할 수 없습니다’처럼 실행 전에 막히는 메시지와 ‘런타임 오류 1004’처럼 실행 중 멈추는 메시지는 조사 방향이 다르다. 화면 캡처 한 장보다 정확한 문구와 멈춘 시점이 문제를 찾는 데 도움이 될 때가 많다.
코드가 실행되다 멈추면 표시된 줄부터 본다
런타임 오류 창에 ‘디버그’ 버튼이 있다면 눌러서 노란색으로 표시된 줄을 확인한다. 예를 들어 다른 PC에서 받은 파일이 예전 폴더의 통합 문서를 열려고 한다면, 매크로 보안을 풀어도 파일 경로 오류는 남는다. 시트 이름을 바꾼 직후 특정 셀을 찾는 줄에서 멈췄다면 코드에 적힌 시트 이름과 실제 탭 이름을 비교한다. 오류 번호만 검색하기보다 멈춘 줄과 그 줄이 참조하는 파일·시트·셀을 함께 보는 편이 정확하다.
‘프로젝트 또는 라이브러리를 찾을 수 없습니다’라는 메시지는 VBA 편집기의 도구 → 참조에서 ‘누락’ 표시가 있는지 확인한다. 필요한 라이브러리가 해당 PC에 설치돼 있는지 먼저 보고, 쓰지 않는 참조일 때만 체크를 해제한다. 32비트 Office에서 쓰던 오래된 코드가 64비트 Office에서 컴파일 오류를 낸다면 API 선언의 PtrSafe와 포인터 자료형을 코드 작성자가 점검해야 한다. 이 문제는 매크로 허용 버튼으로 해결되지 않는다.
내가 이런 파일을 받을 때는 원본을 복사한 다음 확장자와 실행 환경, 보안 알림, 직접 실행 결과, 멈춘 코드 줄 순서로 확인한다. 앞의 세 단계에서 끝나는 경우도 많지만, 실제 코드 오류라면 그때부터 수정 범위를 정확히 잡을 수 있다.
