AI 해결 노트 · 2026-09-18 · 실측 2026-09-18
엑셀 매크로 기록 — 만들어진 코드, .xlsm 저장 경고, 다시 열 때 뜨는 보안 경고까지
한 줄로
제목 행에 굵게·배경색·틀 고정을 넣는 손동작을 매크로로 기록해 봤습니다. 만들어진 Sub 매크로1() 의 본문은 11줄이었고, 2월 시트를 띄운 채 돌리니 2월만 바뀌고 3월은 그대로였습니다. 그 파일을 .xlsx 로 저장하려 하자 「다음 기능은 매크로 제외 통합 문서에 저장할 수 없습니다 · VB 프로젝트」 창이 떴고, .xlsm 으로 저장한 파일을 화면에서 여는 것과 같은 보안 규칙으로 다시 여니 매크로 실행이 막힌 채 열렸습니다. 같은 파일에 「인터넷에서 받음」 표시를 붙여 열었을 때도 막혔는데, 이번에는 켤 단추가 없었습니다.
이런 분께
- 매달 같은 표에 같은 서식을 손으로 다시 넣고 있는 분
- 매크로를 만들어 보고 싶은데 「.xlsm」이 뭔지, 왜 그렇게 저장하라는지 모르겠는 분
- 남이 만든 매크로 파일을 받았는데 노란 줄·붉은 줄이 떠서 눌러도 되는지 망설이는 분
실측 환경
| 항목 | 값 |
|---|---|
| OS | Microsoft Windows 11 Home 10.0.26200 (build 26200) |
| 셸 | PowerShell 7.6.6 |
| 엑셀 | Excel 16.0, build 20326, 언어 코드 1042 |
| 시험 파일 | 직접 만든 더미 거래장부 — 1월·2월·3월 세 시트, 각 7열 × 26행(머리글 1행 + 자료 25행), 서식 없음 |
| 열 구성 | 일자·거래처·담당자·품목·수량·단가·금액 |
| 만든 도구 | openpyxl 3.1.5 |
| 코드 꺼내기 | Python 3.12.10 + olefile (vbaProject.bin 압축 해제) |
| 매크로 설정 | HKCU\Software\Microsoft\Office\16.0\Excel\Security 에 VBAWarnings·AccessVBOM·blockcontentexecutionfrominternet 값 없음. 같은 자리의 정책 경로(HKCU\Software\Policies\...)는 키 자체가 없음 |
거래처는 가나상사·다라산업 같은 지어낸 이름이고, 담당자는 성 한 글자와 이름 두 글자를 무작위로 붙인 세 글자 값(정아라·강하늘 등)입니다. 시험 대상으로 연 파일은 이 더미 장부와 거기서 나온 파일들뿐입니다.
먼저 밝힐 것. 아래에서 리본을 누르고 키를 치는 동작은 사람 손이 아니라 저희가 PowerShell로 보낸 키 입력(SendKeys)으로 돌렸습니다. 다만 그 입력은 화면의 엑셀이 받은 것이고, 매크로 기록 자체는 엑셀의 기록 기능이 한 일입니다. 아래 코드는 저희가 쓴 것이 아니라 기록기가 뱉은 것을 파일에서 꺼낸 것입니다.
1. 기록 시작
리본에서 보기 탭 → 매크로 그룹 → 「매크로」 단추를 누르면 목록이 펼쳐지고, 그 안에 「매크로 기록」이 있습니다. 개발 도구 탭을 켜지 않아도 여기서 됩니다. 저희가 보낸 키는 Alt+W → M → R 이었고, 그러자 앞에 나온 창의 제목이 「매크로 기록」으로 바뀌었습니다.

칸은 네 개입니다.
- 매크로 이름(M) — 입력칸에
매크로1이 글자가 선택된 채로 미리 들어가 있습니다. - 바로 가기 키(K) —
Ctrl+글자 옆에 한 글자짜리 빈 칸이 있습니다. - 매크로 저장 위치(I) — 목록 상자에 「현재 통합 문서」가 들어 있습니다. 이 값이 뒤에 나올
.xlsm문제와 바로 이어집니다. - 설명(D) — 여러 줄짜리 빈 칸.
저희는 아무것도 고치지 않고 Enter를 눌렀고, 결과 파일에 매크로1 이 생겼습니다. 이 순간부터 손동작이 코드로 적힙니다.
2. 기록 중에 한 동작
1월 시트에서 다음 순서로 눌렀습니다.
Ctrl+Home A1 로
Shift+Space 1행 전체 선택
Ctrl+B 굵게
Alt+H, H 홈 탭 → 채우기 색 갤러리 → 아래·아래·Enter
Ctrl+Home, ↓ A2 로
Alt+W, F, F 보기 탭 → 틀 고정 → 틀 고정끝난 뒤 값을 읽으니 이렇게 들어가 있었습니다.
A1.Font.Bold = True
A1.Interior.Color = 14277081
A1.Interior.Pattern = 1
ActiveWindow.FreezePanes = True SplitRow=1 SplitColumn=0기록을 멈추는 자리는 시작한 자리와 같습니다. 저희는 Alt+W → M → R 을 한 번 더 보내서 멈췄습니다.

이 그림의 상태 표시줄 왼쪽, 「준비」 옆에 작은 네모 단추가 하나 보입니다. 그 단추를 눌러도 멈추는지는 확인하지 않았습니다.
3. 만들어진 코드
기록이 끝난 통합 문서를 .xlsm 으로 저장하니 9,690바이트이던 파일이 17,508바이트가 됐습니다. 늘어난 몫은 7,818바이트인데, 그 안을 열어 보면 원본에 없던 항목 하나가 들어와 있습니다.
xl/vbaProject.bin 압축전 10752 압축후 3602 <- 매크로가 들어가는 자리
xl/sharedStrings.xml 압축전 3970 압축후 856 <- 원본 .xlsx 에는 없던 항목늘어난 7,818바이트가 전부 매크로 몫은 아닙니다. 엑셀이 다시 저장하면서 시트 XML과 글자 목록을 자기 방식으로 새로 쓴 몫이 섞여 있습니다. 확실한 건 항목 수가 11개에서 13개로 늘고 xl/vbaProject.bin 이 생겼다는 것입니다.
그 안에서 꺼낸 코드 전문입니다.
Attribute VB_Name = "Module1"
Sub 매크로1()
Attribute 매크로1.VB_ProcData.VB_Invoke_Func = " \n14"
'
' 매크로1 매크로
'
'
Rows("1:1").Select
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
Range("A2").Select
ActiveWindow.FreezePanes = True
End Sub읽어 둘 대목이 두 군데 있습니다. Rows("1:1") 에는 시트 이름이 없습니다. 기록기는 「지금 보고 있는 시트의 1행」이라고만 적기 때문에, 돌릴 때 어느 시트를 띄워 두었느냐로 결과가 갈립니다. 그리고 색이 .Color = 14277081 같은 숫자가 아니라 .ThemeColor = xlThemeColorDark1 과 .TintAndShade = -0.149998474074526 으로 적혔습니다. 갤러리에서 고른 색이 테마에 묶인 색이어서 그런 것으로 보이는데, 테마를 바꿔서 이 매크로가 칠하는 색이 따라 바뀌는지는 시험하지 않았습니다.
저희는 편집기 창을 띄우는 대신 파일 안의 vbaProject.bin 을 파이썬으로 풀어 읽었습니다. 자동화로 Workbook.VBProject 를 조회하면 VBComponents 개수가 0으로 나와서 코드를 읽을 수 없었기 때문입니다. 그 원인은 확인하지 못했습니다.
4. 다른 시트에서 실행
2월 시트를 띄운 채로 매크로1 을 돌렸습니다. 실행 앞뒤로 세 시트를 모두 읽은 값입니다.
| 시트 | 실행 전 | 실행 후 |
|---|---|---|
| 1월 | 굵게 True · 색 14277081 · 고정 True | 그대로 |
| 2월 | 굵게 False · 색 16777215 · 고정 False | 굵게 True · 색 14277081 · 고정 True |
| 3월 | 굵게 False · 색 16777215 · 고정 False | 그대로 |
이번에 기록된 매크로는 실행할 때 띄워 둔 시트에만 들었습니다. 나머지 시트까지 한 번에 처리하는 방법은 시험하지 않았습니다.
5. .xlsx 로 저장하려 하면
매크로가 든 통합 문서를 .xlsx(매크로 제외 형식)로 저장하려 하면 이 창이 뜹니다.

창 제목은 「Microsoft Excel」이고, 본문 첫 줄이 「다음 기능은 매크로 제외 통합 문서에 저장할 수 없습니다.」, 그 아래 점 하나짜리 목록에 「VB 프로젝트」가 적혀 있습니다. 이어지는 문장에 「돌아가서 파일 형식을 매크로 사용 파일 형식(.xlsm)으로 변경하세요」가 나옵니다. 아래 단추는 셋입니다.
- 저장(S) — 초록 테두리가 쳐진 기본 단추.
- 기능 저장 및 지우기(E)
- 돌아가기(B)
저희는 「돌아가기(B)」를 눌렀고, 저장 호출은 이 오류로 끝났습니다. 대상 .xlsx 파일은 만들어지지 않았습니다.
VB 프로젝트와 XLM 시트는 매크로 제외 통합 문서에 저장할 수 없습니다.「저장(S)」을 눌렀을 때 어떻게 되는지는 눌러 보지 않았습니다. 대신 경고를 아예 띄우지 않는 설정(DisplayAlerts = False)으로 같은 저장을 시켜 봤는데, 오류 없이 끝났고 나온 .xlsx 안에는 xl/vbaProject.bin 이 없었습니다. 항목이 13개에서 12개로 줄고 크기는 13,859바이트였습니다. 경고를 지나쳐 저장하면 매크로가 빠진다는 뜻입니다. 이번 시험에서 매크로가 남은 쪽은 SaveAs(..., 52) 로 저장한 .xlsm 이었습니다.
6. 다시 열 때 나오는 보안 경고
.xlsm 파일을 화면에서 여는 것과 같은 보안 규칙(AutomationSecurity = 2)으로 열어 봤습니다. 리본 바로 아래에 옅은 노란 띠가 붙은 채로 열립니다.

띠에 적힌 말은 느낌표 아이콘 다음에 굵은 「보안 경고」, 이어서 「매크로를 사용할 수 없도록 설정했습니다.」이고, 오른쪽에 「콘텐츠 사용」 단추가 있습니다. 이 상태에서 매크로를 돌려 보면 이렇게 거절됩니다(아래는 파일 이름이 들어간 자리를 그대로 옮긴 것입니다).
''KO2_거래장부_기록본.xlsm'!매크로1' 매크로를 실행할 수 없습니다.
이 통합 문서에서 사용할 수 없는 매크로이거나 모든 매크로를 사용하지 못할 수 있습니다.「콘텐츠 사용」을 누른 뒤에 어떻게 되는지는 눌러 보지 않았습니다. 실행이 막힌다는 데까지가 저희가 확인한 부분입니다.
7. 밖에서 받은 파일이면 띠 색이 다릅니다
같은 파일을 복사해 「인터넷에서 내려받음」 표시(Zone.Identifier 의 ZoneId=3)를 붙이고 열었습니다. 이번에는 띠가 옅은 분홍이고, 왼쪽 아이콘도 붉은 금지 표시입니다.

굵은 「보안 위험」 다음에 「Microsoft는 이 파일의 출처를 신뢰할 수 없기 때문에 매크로 실행을 차단했습니다.」가 적혀 있고, 오른쪽에는 「자세한 정보」 단추뿐입니다. 앞 그림에 있던 「콘텐츠 사용」 같은 켜는 단추가 없습니다. 파일 자체는 열렸고 표도 다 보이는데, 매크로 실행은 위와 같은 문구로 막혔습니다.
메일 첨부나 메신저로 받은 .xlsm 을 열었을 때 이 띠를 보신 적이 있을 겁니다. 회사에서 정책으로 매크로를 더 잠가 두는 경우도 있는데(위 표의 VBAWarnings·blockcontentexecutionfrominternet 값을 관리자가 지정하는 방식), 그런 PC에서 화면이 어떻게 나오는지는 확인하지 못했습니다. 이 PC에는 그 값들이 없었고 정책 경로는 키 자체가 없었습니다.
그러니 매크로로 업무를 줄이기 전에 「이 파일이 남에게 건너갔을 때도 돌아가는가」를 먼저 따져 보시는 편이 낫습니다. 나 혼자 쓰는 정리용이면 잘 맞고, 여러 사람에게 돌리는 양식이면 매크로 없이 되는 방법을 먼저 찾는 쪽이 덜 막힙니다.
결과
| 단계 | 어디서 | 확인한 값 |
|---|---|---|
| 기록 시작 | 보기 → 매크로 → 매크로 기록 (Alt+W, M, R) | 창에 이름 매크로1, 저장 위치 「현재 통합 문서」가 미리 들어 있음 |
| 기록 중지 | 같은 키를 한 번 더 | — |
| 기록 결과 | xl/vbaProject.bin | 압축 전 10,752바이트 · Sub 매크로1() 본문 11줄 |
| 다른 시트 실행 | — | 띄워 둔 시트에만 적용(2월 바뀜, 3월 그대로) |
.xlsx 저장 | 경고 창 | 「VB 프로젝트」 저장 불가 · 경고를 끄고 저장하면 vbaProject.bin 사라짐 |
.xlsm 저장 | SaveAs(..., 52) | 9,690 → 17,508바이트, 항목 11개 → 13개 |
| 다시 열기(내 PC 파일) | 노란 띠 | 「보안 경고」 + 「콘텐츠 사용」, 매크로 실행 막힘 |
| 다시 열기(밖에서 받은 파일) | 분홍 띠 | 「보안 위험」 + 「자세한 정보」, 켤 단추 없음, 매크로 실행 막힘 |
실패한 것
- 키 입력으로 리본을 부르는 두 번째 시도에서
Alt+W가 먹지 않아 홈 탭에 머물렀고, 그 사이 다른 프로그램의 창이 앞으로 나와 그 창이 찍혔습니다. 그때 나온 그림 세 장을 모두 지웠습니다. 앞에 있는 창의 프로세스 번호가 저희가 띄운 엑셀과 같은지 확인한 뒤에만 키를 보내도록 고쳐서 다시 돌렸고, 고친 뒤의 실행에서는 첫 시도에 기록 창이 열렸습니다. 실패한 실행들의 내력은 원자료의09_시행착오.txt에 적었습니다. - 「매크로」 단추를 눌러 펼쳐지는 목록은 엑셀 본창과 다른 창이라, 본창 핸들로 찍는 방식에서는 담기지 않았습니다. 이 글의 그림에는 목록이 펼쳐진 화면이 없습니다.
Workbook.VBProject로 코드를 읽으려 했으나VBComponents개수가 0으로 나왔습니다. 원인은 확인하지 못했고, 코드는 파일에서 직접 꺼내는 쪽으로 돌렸습니다.- 경고 창을 닫으려고 처음에
Alt+N(아니요)을 보냈는데 이 창에는 「아니요」가 없어서 닫히지 않았고, 저장 호출이 그대로 멈춰 있었습니다.Alt+B(돌아가기)로 닫았습니다. - 인터넷 표시가 붙은 파일을 열 때는 창을 앞으로 부르는 데 두 번 실패했습니다. 세 번째에 창을 앞으로 부르지 못한 채 화면 복사 함수로만 찍어 얻은 그림입니다.
확인하지 않은 것
- 사람이 마우스로 리본을 눌러 기록했을 때도 같은 코드가 나오는지 맞춰 보지 않았습니다. 이 글의 기록은 모두 보낸 키 입력으로 돌렸습니다.
- 「매크로 저장 위치」를 「개인용 매크로 통합 문서」로 두면 어디에 저장되고 다른 파일에서 어떻게 불리는지 시험하지 않았습니다.
- 바로 가기 키 칸에 글자를 넣었을 때 기존 엑셀 단축키와 어떻게 부딪치는지 확인하지 않았습니다.
- 「상대 참조로 기록」을 켠 경우는 돌려 보지 않았습니다. 이 글은 그 설정을 건드리지 않은 상태의 기록입니다.
- 경고 창의 「저장(S)」·「기능 저장 및 지우기(E)」를 눌렀을 때의 결과, 보안 띠의 「콘텐츠 사용」을 눌렀을 때의 결과는 모두 눌러 보지 않았습니다.
- 신뢰할 수 있는 위치(Trust Center의 「신뢰할 수 있는 위치」)에 파일을 두면 띠가 사라지는지 보지 않았습니다.
- 회사 정책으로 매크로가 잠긴 PC에서의 화면은 보지 못했습니다.
- 편집기 창(
Alt+F11)을 띄워 코드를 보는 경로는 이번에 쓰지 않았습니다.