VBA 매크로, Office 추가 기능, 파이썬으로 워드 자동화하기
자동화할 가치가 있는 워드 작업을 고르고, VBA 매크로, Office 자바스크립트 추가 기능, python-docx 스크립트 중 알맞은 도구를 골라요.
- 난이도
- 전문가
- 시간
- 15분 분량
- 수정:
- 적용 대상:
- Microsoft 365용 Word, Word 2024, Word 2021, 웹용 Word

배울 내용
- 빈도, 시간, 실수 위험으로 자동화할 가치가 있는 워드 작업을 골라요
- 빠른 문서 요소, 자동 고침, 매크로, 추가 기능, python-docx, Power Automate 중에서 알맞은 도구를 골라요
- 매크로를 기록하고, Visual Basic 편집기에서 VBA 코드를 읽고 고쳐요
- 보안을 낮추지 않고 .docm이나 .dotm 파일로 매크로를 안전하게 저장하고 공유해요
- 짧은 python-docx 스크립트로 여러 .docx 파일을 한꺼번에 만들거나 점검해요
시작하기 전에
예제 파일
워드 전문가 - 자동화.docx
이 튜토리얼에서 쓰는 연습 문서를 내려받아 워드에서 따라 해 보세요.
워드 문서(.docx) · 38KB
튜토리얼 1에서 만든 과외 동아리 서식 파일 키트 덕분에 문서 모양은 통일됐어요. 하지만 코디네이터들은 여전히 같은 일을 반복해요. 메일에서 붙여 넣은 글 정리하기, 팁 상자마다 스타일 주기, PDF를 보내기 전에 필드 업데이트하기, 수료증 60장 만들기 같은 일이요. 하나하나는 작지만 모이면 몇 시간이 되고, 지루할 때 사람은 실수를 해요.
이 튜토리얼에서는 어떤 일을 자동화할 가치가 있는지 판단하고, 코드 없는 자동 고침부터 VBA, Office 추가 기능, 파이썬까지 워드에서 쓸 수 있는 도구를 비교해요. 매크로를 기록해 읽기 쉬운 코드로 바꾸고, 누구에게도 매크로 보안을 끄라고 하지 않고 공유하는 방법을 배워요.
자동화할 가치가 있는 일 고르기
자동화에는 처음에 시간이 들어요. 만들고, 시험하고, 설명하고, 나중에 고쳐야 하니까요. 아래 세 가지 중 적어도 두 가지가 높을 때 제값을 해요.
- 빈도: 얼마나 자주 하는지(주마다, 학기마다).
- 시간: 한 번 할 때 몇 분 걸리는지.
- 실수 위험: 실수하면 얼마나 곤란한지(수료증에 아이 이름을 잘못 쓰는 건 공백 하나 더 들어간 것보다 훨씬 나빠요).
간단히 학기당 횟수 × 한 번에 걸리는 분을 계산하면 아낄 수 있는 시간이 나와요. 실수가 치명적이면 두 배로 쳐요. 자동화를 만드는 데 그보다 오래 걸린다면 기다리거나 더 간단한 도구를 고르세요.
| 작업 | 얼마나 자주 | 분 | 실수 위험 | 알맞은 도구 |
|---|---|---|---|---|
| 동아리 연락처 상자 입력 | 매일 | 1 | 낮음 | 빠른 문서 요소나 자동 텍스트(코드 없음) |
| 과회 동아리 같은 오타 고치기 | 매일 | 몇 초 | 낮음 | 자동 고침 항목 |
| 안내문에 붙여 넣은 글 정리 | 지점 전체 주당 10번 | 10 | 보통 | 매크로 기록 후 수정 |
| 월간 보고서 필드 업데이트 후 PDF 저장 | 매달 | 5 | 높음(업데이트를 잊음) | 짧은 VBA 매크로 |
| 수료증 60장 | 1년에 두 번 | 90 | 높음(이름) | 편지 병합이나 python-docx 스크립트 |
| 예전 안내문 40개의 제목과 서식 파일 버전 점검 | 학기에 한 번 | 120 | 보통 | python-docx 스크립트 |
처음 두 줄은 코드가 전혀 필요 없다는 점을 보세요. 항상 가장 간단한 도구부터 써 보세요. 반복되는 내용은 빠른 문서 요소와 자동 텍스트, 반복되는 오타는 자동 고침(파일
도구 비교하기
도구마다 실행되는 곳과 필요한 기술이 달라요. 그 도구를 쓸 사람들이 어디서 일하는지를 보고 고르세요.
| 도구 | 코드 | 실행되는 곳 | 잘하는 일 | 한계 |
|---|---|---|---|---|
| 빠른 문서 요소 / 자동 텍스트 | 없음 | 데스크톱 워드 | 같은 내용을 반복해서 넣기 | 내용을 넣기만 하고, 있는 글은 못 바꿔요 |
| 자동 고침 | 없음 | 그 컴퓨터의 워드 | 입력하면서 단어를 고치거나 늘리기 | 입력할 때만, 내 컴퓨터에서만 동작해요 |
| 매크로 기록 | 자동으로 만들어져요 | Windows용, Mac용 워드 | 정해진 명령 순서를 그대로 다시 실행하기 | 커서 위치를 따르고, 기록 중에는 마우스로 글을 선택할 수 없어요 |
| VBA 매크로 | VBA | Windows용, Mac용 워드 | 반복, 조건 판단, 여러 문서 한꺼번에 처리 | 웹용 Word에서는 안 돼요. .docm이나 .dotm이 필요하고, 인터넷에서 받은 파일에서는 차단돼요 |
| Office 추가 기능 | 자바스크립트 | Windows용, Mac용, 웹용 Word | 어디서나 동작하는 팀용 작업 창 도구 | 웹 개발, 호스팅, 배포가 필요해요 |
| python-docx | 파이썬 | 워드 밖, 파이썬이 있는 컴퓨터 | 여러 .docx 파일 만들기, 읽기, 정리하기 | 필드 업데이트, 목차 다시 만들기, 쪽 나누기, PDF 저장은 못 해요 |
| Power Automate | 로우코드 | 클라우드 | 양식, 메일, 일정으로 시작하는 작업 흐름 | Microsoft 365 요금제에 따라 달라요. 일부 Word 작업은 프리미엄 라이선스가 필요해요 |
매크로 기록하기
매크로는 이름을 붙여 저장한 작은 프로그램이에요. 가장 빠르게 만드는 방법은 내가 하는 일을 워드가 지켜보게 하는 거예요. 보기
- 준비. 정리할 안내문의 사본을 열어요. 클릭 하나하나가 모두 기록되니, 시작하기 전에 순서를 정확히 정해 두세요.
- 이름 짓기. 매크로 기록을 클릭하고
CleanHandout처럼 공백 없는 이름을 입력해요. - 저장 위치 고르기. 매크로 저장 위치에서 모든 문서(Normal.dotm)를 고르면 내 컴퓨터의 모든 문서에서 쓸 수 있어요. 열려 있는 문서를 고르면 그 파일 안에만 저장돼요.
- 바로 가기(선택). 단추를 누르면 빠른 실행 도구 모음에 추가되고, 키보드를 누르면 아직 쓰지 않는 키 조합을 줄 수 있어요.
- 작업하기. 확인을 누르고 Ctrl+H를 눌러 찾을 내용에 공백 두 칸, 바꿀 내용에 공백 한 칸을 입력한 뒤 모두 바꾸기를 클릭하고 대화 상자를 닫아요.
- 중지. 보기
다음 매크로 다음 기록 중지(또는 개발 도구 탭의 같은 단추)를 클릭해요. - 실행. Alt+F8을 눌러
CleanHandout을 고르고 실행을 클릭해요.
VBA 편집기에서 코드 읽고 고치기
Alt+F11(또는 개발 도구
Sub CleanHandout()
'
' CleanHandout 매크로
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub워드는 바꾸기 대화 상자의 설정을 전부 기록했고, Selection(커서)을 썼고, 공백 두 칸씩만 바꿨어요. 그래서 세 칸은 두 칸이 돼요. 아래는 팀원이 읽을 수 있게 다시 쓴 코드예요. 고급 찾기 및 바꾸기 튜토리얼의 와일드카드로 빈 단락 정리도 더했어요.
Option Explicit
' 안내문에 붙여 넣은 글을 정리해요. 먼저 사본에서 실행하세요.
Sub CleanHandout()
' 두 칸 이상의 공백을 한 칸으로
ReplaceAllWild " {2,}", " "
' 연속된 단락 기호를 하나로(빈 단락 삭제)
ReplaceAllWild "^13{2,}", "^p"
End Sub
' 현재 문서 본문 전체에서 와일드카드로 모두 바꾸기
Private Sub ReplaceAllWild(findText As String, _
replaceText As String)
Dim rng As Range
' 선택 영역이 아니라 본문 전체
Set rng = ActiveDocument.Content
With rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = findText
.Replacement.Text = replaceText
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
End Sub바뀐 점과 이유예요.
- 맨 위의 Option Explicit은 변수 이름을 잘못 쓰면 몰래 빈 변수를 새로 만드는 대신 실행을 멈추게 해요. 편집기의 도구
다음 옵션에서 변수 선언 요구를 체크하면 새 모듈마다 자동으로 들어가요. - 주석은 작은따옴표로 시작해요. 무엇을 하는지보다 왜 하는지를 적어요.
- Selection 대신 Range.
ActiveDocument.Content는 본문 전체라서, 커서가 어디 있든 매크로가 똑같이 동작하고 화면도 이리저리 움직이지 않아요. - 작은 도우미 프로시저(
ReplaceAllWild)를 한 번 써 두고 두 번 불러요. 정리 작업을 하나 더 넣을 때는 한 줄만 추가하면 돼요.
이번에는 기록으로는 절대 만들 수 없는 매크로예요. 단락마다 판단을 하거든요. 문서에 팁 상자라는 단락 스타일(키트 서식 파일에 있는 것)이 있어야 해요.
Option Explicit
' "팁:"으로 시작하는 모든 단락에 팁 상자 스타일을 적용해요
Sub StyleTips()
Dim para As Paragraph
Dim count As Long
For Each para In ActiveDocument.Paragraphs
If Left(para.Range.Text, 2) = "팁:" Then
para.Range.Style = ActiveDocument.Styles("팁 상자")
' 손으로 준 서식은 지우고 스타일은 유지
para.Range.Font.Reset
count = count + 1
End If
Next para
MsgBox count & "개 단락에 팁 상자를 적용했어요."
End Sub매크로를 안전하게 저장, 공유, 신뢰하기
일반 .docx에는 매크로를 담을 수 없어요. 매크로가 있는 문서를 .docx로 저장하면 워드가 매크로 없는 문서에는 VB 프로젝트를 저장할 수 없다고 경고하고, 매크로는 사라져요. 코드를 어디에 둘지 고르세요.
| 매크로 저장 위치 | 파일 형식 | 쓸 수 있는 사람 |
|---|---|---|
| Normal.dotm | 나만의 전역 서식 파일 | 나만, 내 컴퓨터의 모든 문서에서. 혼자 쓰는 도구에 좋아요 |
| 매크로 사용 문서 | .docm(Word 매크로 사용 문서) | 그 파일을 열고 매크로 실행이 허용된 사람 |
| 매크로 사용 서식 파일 | .dotm(Word 매크로 사용 서식 파일) | 그 파일로 문서를 만들거나 전역 서식 파일로 불러온 모든 사람 |
팀이라면 동아리 매크로만 담은 동아리 도구.dotm을 따로 두고, 키트 서식 파일은 매크로 없는 .dotx로 유지하는 게 깔끔해요. 코디네이터마다 개발 도구.docx로 남아요.
매크로 보안. 매크로는 파일 삭제까지 워드가 할 수 있는 모든 일을 할 수 있어서, 워드는 매크로를 조심스럽게 다뤄요. 설정은 파일
Office 추가 기능: 어디서나 동작하는 자동화
Office 추가 기능은 워드 안에서, 보통 오른쪽 작업 창으로 실행되는 작은 웹 앱이에요. Word JavaScript API로 HTML과 자바스크립트를 써서 만들고, 같은 추가 기능이 Windows용, Mac용, 웹용 Word에서 모두 동작해요. 설치한 추가 기능은 버전에 따라 홈
코드는 VBA와 비슷한 개체로 문서를 다루지만, 일을 묶어서 처리해요. 요청을 모아 두었다가 context.sync()로 한 번에 워드에 보내요. 팁 스타일 적용을 추가 기능으로 하면 이런 모습이에요.
// Word JavaScript API(추가 기능 안에서):
// "팁:"으로 시작하는 단락에 스타일 적용
await Word.run(async (context) => {
const paras = context.document.body.paragraphs;
paras.load("items/text");
await context.sync();
for (const p of paras.items) {
if (p.text.startsWith("팁:")) {
p.style = "팁 상자";
}
}
await context.sync();
});추가 기능 만들기는 웹 개발 프로젝트예요. 매니페스트 파일, 웹 파일을 올려 둘 곳, 배포 방법이 필요해요. 개발자는 테스트용으로 사이드로드할 수 있고, 팀에는 보통 Microsoft 365 관리자가 관리 센터에서 배포하며, 공개 추가 기능은 Microsoft의 추가 기능 스토어에 올라가요. 과외 동아리에서는 자원봉사자 다수가 웹용 Word를 쓰고 웹 기술이 있는 자원봉사자가 계속 관리해 줄 때만 추가 기능이 의미가 있어요. 시작은 참고 자료의 Word 추가 기능 문서에서 하세요.
워드 밖에서 한꺼번에: python-docx와 Power Automate
python-docx는 워드를 열지 않고 .docx 파일을 직접 읽고 쓰는 무료 파이썬 라이브러리예요. 만들거나 점검할 파일이 많을 때 딱 좋아요. 아래 스크립트는 [이름] 줄이 있는 기본 문서로 학생마다 수료증을 하나씩 만들어요.
# pip install python-docx
from docx import Document
names = ["김하나", "박민준", "이서연"]
for name in names:
# 키트 서식 파일에서 저장한 .docx
doc = Document("수료증 기본.docx")
for para in doc.paragraphs:
if "[이름]" in para.text:
para.text = para.text.replace("[이름]", name)
doc.save(f"수료증 - {name}.docx")다음 스크립트는 폴더 안 안내문마다 제목이 몇 개인지 보여 줘요. 스타일 대신 손으로 꾸민 안내문을 빨리 찾는 방법이에요. 워드 파일 안에는 기본 스타일 이름이 영어(Heading 1)로 저장되기 때문에 한국어 워드에서 만든 파일도 이 코드로 찾을 수 있어요.
from pathlib import Path
from docx import Document
for path in sorted(Path("안내문").glob("*.docx")):
doc = Document(str(path))
heads = [p.text for p in doc.paragraphs
if p.style.name.startswith("Heading")]
print(path.name, "-", len(heads), "개 제목:", heads[:3])- .dotx가 아니라 .docx에서 시작하세요. python-docx는 문서를 여는 도구라서, 키트 서식 파일에서
.docx를 저장해 기본 파일로 써요. 스타일은 모두 그대로 남아요. para.text를 바꾸면 단락 스타일은 남지만, 그 안의 굵게나 색 같은 부분 서식은 일반 글자로 바뀌어요. 자리 표시 줄은 손으로 꾸미지 말고 단락 스타일로 서식을 주세요.- 워드가 아니에요. 필드나 목차 업데이트, 쪽 번호 계산, PDF 저장은 못 해요. 그런 단계는 결과 파일을 워드에서 열어 하거나 VBA 매크로를 돌리세요.
- 사본으로 작업하세요. 따로 만든 폴더에서 하면 스크립트 실수가 원본을 덮어쓰지 않아요.
Power Automate는 Microsoft의 클라우드 작업 흐름 도구예요. 조직에서 쓰고 있다면, 예를 들어 신청 양식 응답을 받아 워드 서식 파일의 콘텐츠 컨트롤을 채우고, PDF로 바꿔 SharePoint에 저장하는 흐름을 만들 수 있어요. 일부 Word 작업은 프리미엄 라이선스가 필요하고 쓸 수 있는 기능은 Microsoft 365 요금제에 따라 다르니, 계획을 세우기 전에 계정을 관리하는 사람에게 확인하세요.
자주 하는 실수
| 실수 | 생기는 문제 | 해결 방법 |
|---|---|---|
| 빠른 문서 요소나 자동 고침을 써 보기 전에 자동화하기 | 클릭 한 번이면 될 일에 코드로 몇 시간을 써요 | 코드 없는 도구부터 써 봐요 |
| 기록 중에 문서를 클릭하기 | 워드가 선택을 기록하지 않아 매크로가 엉뚱하게 동작해요 | 기록하는 동안에는 키보드로 이동하고 선택해요 |
| 기록된 코드를 그대로 두기 | 커서 위치에 따라 달라지고, 읽거나 고치기 어려워요 | Range로 바꾸고, 필요 없는 설정을 지우고, 주석과 Option Explicit을 넣어요 |
| 매크로가 있는 문서를 .docx로 저장하기 | 매크로가 사라져요 | .docm으로 저장하거나 매크로를 .dotm에 둬요 |
| 모든 매크로를 사용하라고 부탁하기 | 여는 모든 문서가 해로운 코드를 실행할 수 있어요 | 신뢰할 수 있는 위치의 .dotm으로 공유하거나 매크로에 서명받아요 |
| 유일한 원본에 스크립트나 매크로 실행하기 | 버그 하나로 모든 파일이 바뀌어요 | 따로 만든 폴더의 사본으로 시험해요 |
| python-docx가 필드를 업데이트하거나 PDF를 만들어 줄 거라 기대하기 | 목차와 쪽 번호가 옛날 그대로예요 | 그 단계는 워드에서 마무리해요 |
연습
연습
매크로를 기록하고 읽기 쉽게 고치기
따라 하기 연습
위의 예제 파일을 내려받아 워드에서 여세요. 1쪽은 여러 메일에서 붙여 넣어 만든 수학 안내문이에요. 겹친 공백, 빈 단락, 손으로 꾸민 팁이 있어요. 2쪽은 할 일 목록이에요. 시작하기 전에 사본을 저장하고 사본에서 작업하세요.
- 점수 매기기: 2쪽 표에 작업마다 얼마나 자주 하는지, 얼마나 걸리는지, 얼마나 위험한지 적어요. 자동화할 가치가 있는 두 가지에 동그라미를 쳐요.
- 기록: 보기
다음 매크로 다음 매크로 기록을 시작해 이름을 CleanHandout으로, 저장 위치를 모든 문서(Normal.dotm)로 정하고, 공백 두 칸을 한 칸으로 모두 바꾸기를 한 번 기록해요. 기록을 중지해요. - 실행: Alt+F8을 눌러 실행해요. Ctrl+Shift+8을 켜고 세 칸 공백이 두 칸이 된 걸 확인해요.
- 읽기: Alt+F11을 누르고 NewMacros를 열어 기록한 코드를 찾아요.
Selection을 쓰는 줄을 찾아보세요. - 다시 쓰기: 이 튜토리얼의
CleanHandout과ReplaceAllWild코드로 바꾸고 맨 위에Option Explicit을 넣어요. 사본에서 실행하고 빈 단락이 사라졌는지 확인해요. - 단락마다 판단하기: 팁 상자라는 단락 스타일(테두리와 음영은 자유)을 만들고,
StyleTips매크로를 넣어 실행해요. 메시지를 보세요. 팁을 몇 개 찾았나요? - 안전하게 저장: 안내문을 일반
.docx로 저장하고, 매크로가 문서가 아니라 Normal.dotm에 그대로 있는지 확인해요.
혼자 해 보기 도전: PDF 보내기 전에 클릭 한 번
모든 필드를 업데이트하고(ActiveDocument.Fields.Update), 문서를 저장한 다음, ActiveDocument.ExportAsFixedFormat으로 같은 폴더에 PDF 사본을 저장하는 UpdateAndExportPdf 매크로를 써 보세요. 인수는 Word VBA 참조에서 찾아요. 그다음 StyleTips를 고쳐 TIP:으로 시작하는 팁과 공백으로 시작하는 팁(LTrim 사용)도 찾게 해요. 두 매크로를 빠른 실행 도구 모음에 추가해요.
돌아보기: 내 한 주의 일 중에서 빈도, 시간, 실수 위험 점수가 가장 높은 일은 무엇이고, 그 일을 맡길 가장 간단한 도구는 무엇일까요?
이해도 확인4문제 중 0문제 정답
답을 고르면 맞았는지와 그 이유를 바로 보여 줘요.
매크로를 기록하는 중에 다음 문장을 선택하고 싶어요. 어떻게 해야 하나요?
워드는 기록하는 동안 마우스로 글을 선택하지 못하게 해요. 키보드로 한 선택은 기록돼요.
기록한 매크로의 Selection을 ActiveDocument.Content로 바꾸는 이유는 무엇인가요?
ActiveDocument.Content 같은 Range는 커서에 영향을 받지 않아서, 매크로가 매번 똑같이 동작해요.
자원봉사자들이 메일로 받은 매크로 사용 파일을 열었더니 빨간 보안 위험 표시줄이 보여요. 올바른 대응은 무엇인가요?
인터넷에서 받은 파일에는 MOTW 표시가 붙고, 일부러 매크로를 차단해요. 보안을 낮추지 말고 신뢰할 수 있는 위치나 서명된 매크로를 쓰세요.
python-docx만으로는 할 수 없는 일은 무엇인가요?
python-docx는 워드를 실행하지 않고 파일 내용만 고쳐서, 필드 업데이트, 쪽 나누기, PDF 내보내기는 못 해요.
이렇게 할 수 있으면 다음으로 넘어가도 돼요
하나씩 확인하며 체크해 보세요. 체크 표시는 이 브라우저에만 저장돼요.
관련 자료
참고 자료
도움이 되었나요? 틀린 부분을 발견하셨나요? 피드백 보내기 · admin@arumsoft.com