엑셀에서 매크로 실행 창(Alt+F8) 목록이 갱신 안 될 때 갑작스레 작업 흐름이 끊어지면 당황하기 쉽습니다. 이 글에서는 동일한 문제가 반복될 때마다 시간을 낭비하지 않도록, 원인 진단부터 VBA 자동화 해결책까지 단계별로 정리했습니다.
현상이 나타나는 전형적인 징후
- 새 모듈을 삽입했는데 목록에 표시되지 않는다.
- 이미 삭제한 매크로가 여전히 목록에 남아 있다.
Workbook_Open
같은 이벤트 매크로는 잘 작동하지만 목록에는 보이지 않는다.
이런 패턴은 대체로 프로시저 범위, 파일 상태, VBA 캐시 문제로 좁혀집니다.
원인별 빠른 진단 체크리스트
증상 | 가장 흔한 원인 | 1차 조치 |
---|---|---|
새 매크로가 보이지 않음 | Option Private Module 선언 | 선언 제거 후 저장 |
이전 매크로가 남아 있음 | Personal.xlsb 캐시 미동기화 | 엑셀 완전 종료 후 재실행 |
모든 매크로가 사라짐 | 파일이 xls/xlsx 확장자 | xlsm 또는 xlsb로 저장 |
정의는 있는데 호출 불가 | 매크로 이름이 숫자로 시작 | 영문자로 변경 |
원인 1 : Option Private Module 숨김
Option Private Module
선언이 있는 모듈 안의 프로시저는 Alt+F8 목록에서 숨겨집니다. 팀에서 배포 받은 파일에 이 옵션이 남아 있는지 확인하세요.
' 이 선언이 있으면 리스트에 안 뜬다
Option Private Module
Sub ShowHidden()
MsgBox "이 매크로는 Alt+F8에 나타나지 않습니다."
End Sub
해결 절차
- VBE(Alt+F11) → 모듈 더블클릭.
Option Private Module
한 줄 제거.- 저장(Ctrl+S) → 파일 닫기 → 엑셀 재열기.
원인 2 : Personal.xlsb 캐시 비동기화
여러 통합문서에 매크로를 공유할 때 Personal.xlsb를 씁니다. 이 파일이 충돌 상태에 빠지면 오래된 정보가 남죠.
- 증상 : 새 프로시저 추가 후에도 Personal.xlsb 탭이 “읽기 전용”으로 표시.
- 응급조치 : 모든 엑셀 인스턴스 종료 → 작업 관리자의
EXCEL.EXE
프로세스가 사라지는지 확인 → 다시 열기.
강제 동기화 VBA 스크립트
Sub RebuildPersonalCache()
Dim wb As Workbook, path As String
path = Application.StartupPath & "\PERSONAL.XLSB"
If Dir(path) = "" Then MsgBox "Personal.xlsb 없음": Exit Sub
Application.DisplayAlerts = False
' 임시 복구: 복사 후 삭제 → 다시 로드
FileCopy path, path & ".bak"
Kill path ' 강제 삭제
Workbooks.Open path & ".bak" ' 백업 열기
ActiveWorkbook.SaveAs path, FileFormat:=50 ' xlsb
ActiveWorkbook.Close
Application.DisplayAlerts = True
MsgBox "Personal.xlsb 캐시를 초기화했습니다."
End Sub
원인 3 : 파일 확장자 불일치
매크로를 포함하려면 *.xlsm
혹은 *.xlsb
여야 합니다.*.xlsx
로 저장한 뒤 코드를 삽입하면 작동은 해도 목록에는 안 뜨는 미묘한 상황이 생깁니다.
팁 :
Workbook
속성 창에서IsAddin=True
로 설정된 파일은 항상 숨겨집니다. 테스트 중이라면 False로 돌려두세요.
원인 4 : 프로시저 네이밍 규칙 위반
- 숫자·한글·특수문자 시작 → Alt+F8 무시.
- 띄어쓰기 포함 → 자동으로 밑줄로 변환되지만 드물게 누락.
정석은 영문자·밑줄로 시작 + CamelCase
를 쓰는 겁니다.
즉시 적용 가능한 공통 해결책
1. 코드 정리 후 전체 컴파일
- VBE → Debug ▸ Compile VBAProject.
- 오류가 없으면 저장 후 닫았다가 다시 엽니다.
- 목록 새로고침이 이 단계에서 해결되는 경우가 60 % 이상입니다.
2. VBA 캐시 초기화 스크립트
다음 스크립트는 모든 모듈을 추출한 뒤 다시 삽입해 목록을 재생성합니다.
Sub ForceRefreshMacroList()
Dim cmp As VBIDE.VBComponent, temp As String
Application.ScreenUpdating = False
For Each cmp In ThisWorkbook.VBProject.VBComponents
If cmp.Type = vbext_ct_StdModule Then
temp = Environ$("TEMP") & "\" & cmp.Name & ".bas"
cmp.Export temp
ThisWorkbook.VBProject.VBComponents.Remove cmp
ThisWorkbook.VBProject.VBComponents.Import temp
Kill temp
End If
Next cmp
Application.ScreenUpdating = True
MsgBox "Alt+F8 목록을 재구성했습니다."
End Sub
주의사항
- 신뢰할 수 있는 액세스 설정(파일 ▸ 옵션 ▸ 보안센터 ▸ 매크로 설정)을 ‘VBA 프로젝트 개체 모델에 안전한 액세스 허용’으로 바꿔야 위 코드가 실행됩니다.
- 회사 정책으로 막혀 있다면 IT 부서 협조가 필요합니다.
실무 시나리오별 단계별 가이드
개발 중 빈번한 코드 추가·삭제
- 모듈당 기능 하나만 유지(재사용성↑).
- 기능 완성마다 위의
ForceRefreshMacroList
실행. - 버전 관리(Git)로 모듈 추적.
다수 사용자가 공유 파일 편집
- 공용 파일에는 폼·모듈을 추가하지 말고 Personal.xlsb 이용.
- 정기적으로 Personal.xlsb를
.zip
으로 백업(파일탐색기에서 복사 후 압축).
관리자 권한이 없는 PC
- 캐시 초기화 대신 엑셀 완전 종료 → 재부팅이 현실적 대안.
- 모듈 이름 충돌이 잦으면 팀 공통 네임스페이스 접두어(예:
TeamX_
) 도입.
자주 묻는 질문 (FAQ)
Q. 이벤트 매크로는 왜 Alt+F8에 안 보이나요?
A. Private Sub Workbook_Open()
처럼 예약어 형태를 갖춘 프로시저는 사용자 호출 메뉴에서 제외됩니다.
Q. VBE에서 모듈 이름을 바꿨는데 목록이 그대로예요.
A. 이름 변경 후 저장 → 파일 닫기 → 재열기 과정을 거쳐야 캐시가 갱신됩니다.
Q. 목록이 비어 있는데 매크로 경고는 뜹니다.
A. 숨겨진 자동 실행 매크로가 존재합니다. IsAddin
여부와 숨김 모듈을 점검하세요.
추가 팁과 모범 사례
- 모듈 헤더 주석에 기능 요약 + 수정 이력을 써 두면 목록만 보고도 기능을 추리할 수 있어 협업 효율↑.
- VBA 프로젝트 암호를 걸어도 목록 자체는 보입니다. 보호 목적이라면
Option Private Module
병행. - 실제 배포 전, 빈 가상 머신에서 목록 갱신 여부를 검증해 두면 사용자 불만을 사전에 차단합니다.
엑셀에서 매크로 실행 창(Alt+F8) 목록이 갱신 안 될 때 당황하지 말고, 위 단계대로 원인 진단 → 캐시 복구 → 자동화 스크립트를 적용해 보세요. 꾸준히 모듈 구조와 네이밍 규칙을 관리하면 같은 문제가 재발해도 즉시 해결할 수 있습니다. 엑셀에서 매크로 실행 창(Alt+F8) 목록이 갱신 안 될 때, 이제 더 이상 업무가 지체되지 않길 바랍니다.
'#2 엑셀 오류 가이드' 카테고리의 다른 글
엑셀 차트 Data Label 자동 조정 – 겹치는 라벨을 깔끔하게 해결하기 (1) | 2025.05.07 |
---|---|
엑셀에서 Picture Link(카메라 도구)가 깨져 보일 때 해결법 (0) | 2025.05.06 |
엑셀 호환 모드 문제로 특정 기능이 작동하지 않을 때 해결법 (0) | 2025.05.05 |
엑셀에서 Solver 애드인 로드 후 리본 메뉴가 표시 안 될 때 (2) | 2025.05.04 |
엑셀에서 VBA 코드가 인증서 서명 후에도 매크로 차단될 때 (1) | 2025.05.03 |