본문 바로가기
#2 엑셀 오류 가이드

엑셀에서 매크로 실행 창(Alt+F8) 목록이 갱신 안 될 때 빠르게 해결하는 완벽 가이드

by 이세계의엑셀 2025. 5. 8.
반응형

엑셀에서 매크로 실행 창(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

해결 절차

  1. VBE(Alt+F11) → 모듈 더블클릭.
  2. Option Private Module 한 줄 제거.
  3. 저장(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. 코드 정리 후 전체 컴파일

  1. VBE → Debug ▸ Compile VBAProject.
  2. 오류가 없으면 저장 후 닫았다가 다시 엽니다.
  3. 목록 새로고침이 이 단계에서 해결되는 경우가 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 부서 협조가 필요합니다.

실무 시나리오별 단계별 가이드

개발 중 빈번한 코드 추가·삭제

  1. 모듈당 기능 하나만 유지(재사용성↑).
  2. 기능 완성마다 위의 ForceRefreshMacroList 실행.
  3. 버전 관리(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) 목록이 갱신 안 될 때, 이제 더 이상 업무가 지체되지 않길 바랍니다.

반응형