- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀에서 매크로가 실행되지 않을 때 발생 원인을 체계적으로 진단하고, 보안 설정·파일 차단 해제·신뢰할 수 있는 위치·디지털 서명·VBA 코드 및 참조 오류 등 실무에서 자주 마주치는 문제를 단계별로 해결하도록 돕는 것이다.
빠른 점검 체크리스트(5분 완성)
아래 순서대로 점검하면 대부분의 “매크로 실행 안 됨” 문제를 해결할 수 있다.
- 파일 형식 확인:
.xlsx는 매크로가 저장되지 않으므로.xlsm또는.xlsb인지 확인한다. - 인터넷에서 받은 파일 차단 해제: 파일 속성에서 “차단 해제”를 클릭하고 다시 연다.
- 보안 경고 처리: 리본 상단 노란/붉은 바의 “콘텐츠 사용” 버튼으로 매크로를 허용한다.
- 신뢰할 수 있는 위치 지정: 자주 쓰는 매크로 파일 폴더를 신뢰할 수 있는 위치로 추가한다.
- 디지털 서명 또는 보안 수준 조정: 조직 정책상 서명 요구 시 인증서로 서명하거나 매크로 설정을 조정한다.
- VBA 오류·참조 깨짐 확인: VBE에서 컴파일 오류와 “MISSING” 참조를 해결한다.
- 이벤트 비활성화 여부 확인:
Application.EnableEvents가 True인지 확인한다. - 64비트 호환성 확인: API 선언에
PtrSafe와LongPtr사용 여부를 점검한다. - Add-in/COM 추가 기능 충돌 점검: 안전 모드로 기동하여 충돌 여부를 분리한다.
- 파일 손상·프로젝트 손상 검사: 다른 PC/프로필에서 열어보거나 모듈을 새로운 파일로 이관한다.
1. 파일 형식·보안 경고·차단 해제
1) 파일 형식 점검
.xlsx: 매크로 없음. 매크로가 있어도 저장 시 삭제된다. 매크로 실행 불가이다..xlsm: 매크로 사용 통합 문서. 일반적으로 권장된다..xlsb: 바이너리 형식. 대용량·속도 유리하며 매크로 포함 가능하다.
.xlsx로 저장하면 코드가 삭제된다. 반드시 .xlsm 또는 .xlsb로 저장한다.2) 인터넷에서 받은 파일 차단 해제(Mark of the Web)
전자메일 첨부나 웹에서 내려받은 파일은 “인터넷에서 가져온 파일”로 표시되어 매크로가 차단된다. 해결 절차는 다음과 같다.
- 파일을 닫는다.
- Windows 탐색기에서 해당 파일을 마우스 오른쪽 버튼 → 속성을 연다.
- 일반 탭 하단의 “차단 해제” 체크 후 확인을 클릭한다.
- 파일을 다시 연다.
3) 보안 경고 배너 처리
리본 상단에 “보안 경고” 또는 “보안 위험” 배너가 나타나면 “콘텐츠 사용” 또는 “매크로 사용”을 눌러 허용한다. 조직 정책에 따라 버튼이 비활성화될 수 있으며, 이 경우 신뢰할 수 있는 위치·디지털 서명·관리자 정책 확인이 필요하다.
2. 신뢰 센터 설정(Trust Center) 정비
경로: 파일 → 옵션 → 보안 센터 → 보안 센터 설정
1) 매크로 설정
- 모든 매크로 사용 안 함(알림 표시): 안전하며, 알림으로 선택적 허용 가능하다.
- 디지털 서명된 매크로만 사용: 서명 없는 매크로는 차단한다.
- 모든 매크로 사용: 테스트 환경에서만 권장한다.
2) 신뢰할 수 있는 위치(Trusted Locations)
자주 쓰는 매크로를 보관하는 폴더를 신뢰할 수 있는 위치로 추가하면 해당 폴더의 파일은 경고 없이 실행된다.
- 보안 센터 → 신뢰할 수 있는 위치 → 새 위치 추가
- 네트워크 위치의 경우 “이 위치를 신뢰” 관련 옵션을 별도로 확인한다.
3) 보호된 보기(Protected View)
인터넷·안전하지 않은 위치 파일은 보호된 보기로 열릴 수 있다. 편집 사용을 눌러 일반 모드로 전환한 뒤 매크로를 허용한다.
3. 디지털 서명과 조직 정책
1) 디지털 서명 적용
조직에서 “서명된 매크로만 실행” 정책이면 인증서로 VBA 프로젝트에 서명해야 한다.
- 개발 도구 탭 → Visual Basic → VBE에서 도구 → 디지털 서명
- 사용할 인증서를 선택하고 확인
- 파일 저장 후 다시 열어 서명 상태를 확인
2) 그룹 정책·EDR 영향
그룹 정책이나 EDR(엔드포인트 보안)이 매크로 실행을 차단할 수 있다. 정책 예: 인터넷 원본 파일의 VBA 차단, 서명 강제, 신뢰 위치 제한 등이다. 사내 표준 절차에 따라 예외 등록 또는 서명 배포를 진행한다.
4. VBA 코드 측면 진단
1) 컴파일 오류 및 참조 깨짐
VBE에서 디버그 → VBAProject 컴파일을 실행해 오류를 조기 발견한다. “MISSING”으로 표시되는 참조가 있으면 체크 해제하거나 올바른 버전으로 교체한다.
| 증상 | 가능 원인 | 해결 방법 |
|---|---|---|
| 버튼 클릭해도 반응 없음 | 컴파일 오류가 숨겨져 있음 | VBE에서 컴파일 실행, 오류 라인 수정 |
| 특정 함수 호출 시 중단 | 참조 라이브러리 MISSING | 도구 → 참조에서 대체 라이브러리 선택 |
| 64비트 Office에서 API 호출 실패 | PtrSafe 미적용 | 선언에 PtrSafe 및 LongPtr 반영 |
' 64비트 호환 예시 #If VBA7 Then Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long #Else Private Declare Function GetTickCount Lib "kernel32" () As Long #End If 2) 이벤트·설정 값으로 인한 미동작
이벤트가 비활성화되면 워크시트 변경·열기 이벤트가 실행되지 않는다.
Sub RestoreExcelState() Application.EnableEvents = True Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub EnableEvents가 False로 남을 수 있다. 복구 매크로를 준비해 두는 것이 좋다.3) 올바른 위치·이름 규칙
Workbook_Open이벤트는 ThisWorkbook에 있어야 한다.Worksheet_Change등 시트 이벤트는 해당 시트 개체에 있어야 한다.- 리본 버튼·도형에 연결된 매크로는 표준 모듈(Module1 등)의
Public Sub이어야 한다.
' 표준 모듈에 배치 Public Sub RunReport() MsgBox "보고서 실행" End Sub
' ThisWorkbook에 배치
Private Sub Workbook_Open()
RunReport
End Sub
4) 오류 처리와 로깅
Sub SafeRun() On Error GoTo EH ' 핵심 로직 Debug.Print "Start: "; Now ' ... Debug.Print "Done: "; Now Exit Sub EH: MsgBox "오류: " & Err.Number & " - " & Err.Description End Sub 즉시 창(Immediate Window, Ctrl+G)에 기록을 남겨 실행 흐름을 확인한다.
5. 추가 기능(Add-in) 및 충돌 분리
1) 안전 모드 기동
실행 충돌이 의심되면 안전 모드로 엑셀을 시작해 추가 기능의 개입을 배제한다.
Win+R → excel /safe 이후 파일을 열어 매크로가 동작하면 추가 기능 충돌 가능성이 높다. COM 추가 기능, Excel 추가 기능을 하나씩 비활성화해 원인을 특정한다.
2) 개인 매크로 통합 문서(Personal.xlsb)
개인 매크로가 자동 실행 코드를 포함하면 다른 통합 문서의 동작에 간섭할 수 있다. 필요 시 모듈을 임시로 내보내고 빈 Personal.xlsb로 재기동해 본다.
6. 파일 손상·프로젝트 손상 대응
- 다른 PC나 새 Windows 사용자 프로필에서 열어 본다.
- VBE에서 모듈·양식·클래스를 파일(.bas, .frm, .cls)로 내보낸 뒤 새
.xlsm에 가져온다. - 시트·차트 개체에 묶인 코드가 있으면 새 파일에 시트를 복사하지 말고 데이터만 붙여 넣는다.
7. 배포·운영을 위한 안전한 설계 패턴
- 서명·빌드 파이프라인: 테스트용과 배포용을 분리하고 배포 빌드에만 서명한다.
- 신뢰 위치 활용: 네트워크 경로의 신뢰 설정 정책을 합의한다.
- 로깅·진단 스위치: 숨겨진 시트나 텍스트 파일에 로그를 남긴다.
- 예외 복구 루틴:
EnableEvents,Calculation등 상태 복구 루틴을 포함한다. - 호환성: 32/64비트 API 선언, 기준 Office 버전, 필수 참조 목록을 문서화한다.
8. 증상별 원인-해결 매핑 표
| 증상 | 주요 원인 | 해결 방법 |
|---|---|---|
| 매크로 버튼 클릭 무반응 | 보안 차단, 이벤트 비활성화, 참조 깨짐 | 콘텐츠 사용, EnableEvents=True, 참조 복구·컴파일 |
| 열자마자 경고 배너 | 인터넷 원본, 보호된 보기 | 속성 차단 해제, 편집 사용 후 매크로 허용 |
| 컴파일 오류 발생 | 타깃 Office 버전 차이, 선언 불일치 | PtrSafe, LongPtr 반영, 조건부 컴파일 |
| 일부 기능만 실패 | COM 추가 기능 충돌 | 안전 모드로 분리, 문제 Add-in 비활성화 |
| 시트 변경 이벤트 동작 안 함 | EnableEvents=False | 상태 복구 루틴 실행 |
| 저장 후 코드 사라짐 | .xlsx로 저장 | .xlsm 또는 .xlsb로 다시 저장 |
| 조직 PC에서만 차단 | 그룹 정책, EDR 차단 | 정책 예외 신청, 서명 요구 충족 |
| 버튼에 연결된 매크로 없음 | 이름 변경·모듈 위치 오류 | 표준 모듈 Public Sub에 배치 후 연결 재설정 |
| 열 때 충돌·강제 종료 | 프로젝트 손상 | 모듈 내보내기→새 파일로 이식 |
9. 표준 복구 스크립트 모음
' 1) 전역 상태 복구 Sub ResetExcelState() On Error Resume Next Application.EnableEvents = True Application.ScreenUpdating = True Application.DisplayAlerts = True Application.Calculation = xlCalculationAutomatic End Sub
' 2) 신뢰 상태 점검
Sub Diagnostics()
Debug.Print "EnableEvents: "; Application.EnableEvents
Debug.Print "Calculation: "; Application.Calculation
Debug.Print "ScreenUpdating: "; Application.ScreenUpdating
End Sub
' 3) 런타임 오류 캡처 래퍼
Sub RunSafely()
On Error GoTo EH
' 호출부
Call MainTask
Exit Sub
EH:
MsgBox "Err " & Err.Number & ": " & Err.Description, vbExclamation, "VBA"
End Sub
10. 운영 체크리스트(팀 적용용)
- 배포 전: 컴파일 통과, 참조 목록 고정, 64비트 검증, 로그 활성화
- 배포 채널: 신뢰 위치 또는 서명 배포, 인터넷 차단 해제 가이드 포함
- 사용자 안내: 최초 실행 시 보안 배너 처리 방법 스크린샷 제공
- 사후 지원: 문제 발생 시 체크리스트와 로그 파일 수집 절차 공유
FAQ
“콘텐츠 사용” 버튼이 비활성화되어 있다.
그룹 정책 또는 레지스트리로 매크로가 강제 차단되어 있을 가능성이 높다. 관리자에게 정책 예외 등록 또는 서명 요구사항을 문의한다. 임시 우회보다 정책 준수가 우선이다.
버튼에 연결된 매크로가 보이지 않는다.
매크로가 표준 모듈이 아닌 시트/ThisWorkbook에 있으면 연결 목록에 나타나지 않는다. 코드를 표준 모듈로 이동하고 Public Sub로 선언한다.
파일을 열면 “인터넷에서 가져온 파일”로 차단된다고 나온다.
파일 속성에서 “차단 해제” 후 다시 연다. 압축 해제한 파일에 대해 각각 수행한다. 자주 쓰는 폴더는 신뢰할 수 있는 위치로 등록한다.
VBA 코드가 갑자기 전혀 실행되지 않는다.
디버깅 중 중단으로 EnableEvents=False가 남았을 수 있다. 상태 복구 루틴을 실행해 True로 되돌린다.
64비트로 바꾸고 나서 API 호출 부분만 실패한다.
Declare에 PtrSafe와 포인터형 LongPtr 적용이 필요하다. 조건부 컴파일 지시문으로 32/64비트를 분기한다.
서명 후 다시 저장했더니 또 경고가 나온다.
코드를 수정하면 서명이 무효화된다. 최종 빌드에 서명하고 배포한다.
참조에 MISSING 표시가 있다.
버전 차이로 라이브러리 경로가 달라졌을 가능성이 있다. 해당 항목의 체크를 해제하고 대체 가능한 버전을 선택한 뒤 컴파일한다.
.xlsx에서 매크로가 사라졌다.
.xlsx는 매크로를 저장하지 않는다. .xlsm 또는 .xlsb로 다시 저장하고, 기존 코드는 모듈 파일로부터 가져오기한다.
안전 모드에서는 되는데 일반 모드에서는 안 된다.
추가 기능 충돌 가능성이 높다. COM/Excel 추가 기능을 하나씩 비활성화하며 원인을 특정한다.