엑셀 매크로 실행 안 될 때 해결 방법 총정리(보안 경고·차단 해제·VBA 오류 완벽 가이드)

이 글의 목적은 엑셀에서 매크로가 실행되지 않을 때 발생 원인을 체계적으로 진단하고, 보안 설정·파일 차단 해제·신뢰할 수 있는 위치·디지털 서명·VBA 코드 및 참조 오류 등 실무에서 자주 마주치는 문제를 단계별로 해결하도록 돕는 것이다.

빠른 점검 체크리스트(5분 완성)

아래 순서대로 점검하면 대부분의 “매크로 실행 안 됨” 문제를 해결할 수 있다.

  1. 파일 형식 확인: .xlsx는 매크로가 저장되지 않으므로 .xlsm 또는 .xlsb인지 확인한다.
  2. 인터넷에서 받은 파일 차단 해제: 파일 속성에서 “차단 해제”를 클릭하고 다시 연다.
  3. 보안 경고 처리: 리본 상단 노란/붉은 바의 “콘텐츠 사용” 버튼으로 매크로를 허용한다.
  4. 신뢰할 수 있는 위치 지정: 자주 쓰는 매크로 파일 폴더를 신뢰할 수 있는 위치로 추가한다.
  5. 디지털 서명 또는 보안 수준 조정: 조직 정책상 서명 요구 시 인증서로 서명하거나 매크로 설정을 조정한다.
  6. VBA 오류·참조 깨짐 확인: VBE에서 컴파일 오류와 “MISSING” 참조를 해결한다.
  7. 이벤트 비활성화 여부 확인: Application.EnableEvents가 True인지 확인한다.
  8. 64비트 호환성 확인: API 선언에 PtrSafeLongPtr 사용 여부를 점검한다.
  9. Add-in/COM 추가 기능 충돌 점검: 안전 모드로 기동하여 충돌 여부를 분리한다.
  10. 파일 손상·프로젝트 손상 검사: 다른 PC/프로필에서 열어보거나 모듈을 새로운 파일로 이관한다.
주의 : 조직의 그룹 정책이 매크로 실행을 제한하는 경우 사용자가 임의로 해제하면 보안 위반이 될 수 있다. 업무 규정과 보안 지침을 우선 확인한다.

1. 파일 형식·보안 경고·차단 해제

1) 파일 형식 점검

  • .xlsx: 매크로 없음. 매크로가 있어도 저장 시 삭제된다. 매크로 실행 불가이다.
  • .xlsm: 매크로 사용 통합 문서. 일반적으로 권장된다.
  • .xlsb: 바이너리 형식. 대용량·속도 유리하며 매크로 포함 가능하다.
주의 : 매크로 작성 후 .xlsx로 저장하면 코드가 삭제된다. 반드시 .xlsm 또는 .xlsb로 저장한다.

2) 인터넷에서 받은 파일 차단 해제(Mark of the Web)

전자메일 첨부나 웹에서 내려받은 파일은 “인터넷에서 가져온 파일”로 표시되어 매크로가 차단된다. 해결 절차는 다음과 같다.

  1. 파일을 닫는다.
  2. Windows 탐색기에서 해당 파일을 마우스 오른쪽 버튼 → 속성을 연다.
  3. 일반 탭 하단의 “차단 해제” 체크 후 확인을 클릭한다.
  4. 파일을 다시 연다.
주의 : 압축파일(.zip) 내부에서 바로 열면 차단 정보가 유지된다. 반드시 압축을 해제한 뒤 속성에서 차단을 해제한다.

3) 보안 경고 배너 처리

리본 상단에 “보안 경고” 또는 “보안 위험” 배너가 나타나면 “콘텐츠 사용” 또는 “매크로 사용”을 눌러 허용한다. 조직 정책에 따라 버튼이 비활성화될 수 있으며, 이 경우 신뢰할 수 있는 위치·디지털 서명·관리자 정책 확인이 필요하다.

2. 신뢰 센터 설정(Trust Center) 정비

경로: 파일 → 옵션 → 보안 센터 → 보안 센터 설정

1) 매크로 설정

  • 모든 매크로 사용 안 함(알림 표시): 안전하며, 알림으로 선택적 허용 가능하다.
  • 디지털 서명된 매크로만 사용: 서명 없는 매크로는 차단한다.
  • 모든 매크로 사용: 테스트 환경에서만 권장한다.
주의 : “VBA 프로젝트 개체 모델에 안전하게 액세스하도록 신뢰” 옵션은 외부 코드가 VBA에 접근할 수 있도록 하며, 자동화 환경에서 필요하다. 보안 영향 범위를 이해하고 적용한다.

2) 신뢰할 수 있는 위치(Trusted Locations)

자주 쓰는 매크로를 보관하는 폴더를 신뢰할 수 있는 위치로 추가하면 해당 폴더의 파일은 경고 없이 실행된다.

  1. 보안 센터 → 신뢰할 수 있는 위치 → 새 위치 추가
  2. 네트워크 위치의 경우 “이 위치를 신뢰” 관련 옵션을 별도로 확인한다.

3) 보호된 보기(Protected View)

인터넷·안전하지 않은 위치 파일은 보호된 보기로 열릴 수 있다. 편집 사용을 눌러 일반 모드로 전환한 뒤 매크로를 허용한다.

3. 디지털 서명과 조직 정책

1) 디지털 서명 적용

조직에서 “서명된 매크로만 실행” 정책이면 인증서로 VBA 프로젝트에 서명해야 한다.

  1. 개발 도구 탭 → Visual Basic → VBE에서 도구 → 디지털 서명
  2. 사용할 인증서를 선택하고 확인
  3. 파일 저장 후 다시 열어 서명 상태를 확인
주의 : 서명 후 코드를 수정하면 서명이 무효화된다. 배포 전 최종 빌드에 서명한다.

2) 그룹 정책·EDR 영향

그룹 정책이나 EDR(엔드포인트 보안)이 매크로 실행을 차단할 수 있다. 정책 예: 인터넷 원본 파일의 VBA 차단, 서명 강제, 신뢰 위치 제한 등이다. 사내 표준 절차에 따라 예외 등록 또는 서명 배포를 진행한다.

4. VBA 코드 측면 진단

1) 컴파일 오류 및 참조 깨짐

VBE에서 디버그 → VBAProject 컴파일을 실행해 오류를 조기 발견한다. “MISSING”으로 표시되는 참조가 있으면 체크 해제하거나 올바른 버전으로 교체한다.

증상가능 원인해결 방법
버튼 클릭해도 반응 없음컴파일 오류가 숨겨져 있음VBE에서 컴파일 실행, 오류 라인 수정
특정 함수 호출 시 중단참조 라이브러리 MISSING도구 → 참조에서 대체 라이브러리 선택
64비트 Office에서 API 호출 실패PtrSafe 미적용선언에 PtrSafeLongPtr 반영
' 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에 가져온다.
  • 시트·차트 개체에 묶인 코드가 있으면 새 파일에 시트를 복사하지 말고 데이터만 붙여 넣는다.
주의 : 암호화된 VBA 프로젝트는 손상 시 복구가 제한적이다. 정기적으로 모듈을 파일로 내보내고 버전 관리를 권장한다.

7. 배포·운영을 위한 안전한 설계 패턴

  1. 서명·빌드 파이프라인: 테스트용과 배포용을 분리하고 배포 빌드에만 서명한다.
  2. 신뢰 위치 활용: 네트워크 경로의 신뢰 설정 정책을 합의한다.
  3. 로깅·진단 스위치: 숨겨진 시트나 텍스트 파일에 로그를 남긴다.
  4. 예외 복구 루틴: EnableEvents, Calculation 등 상태 복구 루틴을 포함한다.
  5. 호환성: 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 추가 기능을 하나씩 비활성화하며 원인을 특정한다.