
공공기관은 연말에 문서 이관을 위해서 문서철 정리를 하는데요.
파일철에 제목이나 년도, 부서명을 프린트해서 붙이는 작업이 귀찮기 때문에
라벨지를 이용해서 문서제목, 부서명, 년도, 문서철 이름 등을 출력하면 편한데
정부문서 라벨 양식인 프린텍 v4320양식은 엑셀 일괄처리를 지원하지 않습니다.
프린텍 라벨입력 프로그램에서는 우편주소 같은 경우만 엑셀목록으로 일괄입력하는 것을 지원합니다.
v4320 형식의 경우는 제목, 부서, 년도, 문서철이름 등으로 여러가지 항목이 있고
특히 1페이지에 4개 세트를 담고 있어서 엑셀목록을 지원하지 않습니다.
이 때 파워포인트에 해당 양식을 기준 슬라이드로 1슬라이드에 만들고
VBA로 엑셀파일에서 목록을 읽어서
슬라이드를 추가하면서 자동으로 도형의 내용을 채워줄 수 있습니다.
(워드는 페이지 내용이 계속 이어지는 구조이지만
파워포인트는 슬라이드 단위 처리라서
워드보다 파워포인트가 이런 작업에서 편리합니다. )
1. 첨부파일을 다운로드 받아 파일속성에서 차단해제를 하시고 매크로를 허용하면서 pptm파일을 엽니다.
슬라이드에 4320 양식에 맞게 도형을 만들어야 합니다.
첨부파일 1슬라이드에 4320 양식으로 도형이 만들어져 있습니다.
|
참고로, 파워포인트에서 프린텍 등의 양식을 만드는 방법입니다.
먼저 프린텍 라벨 프로그램을 다운 받아 설치하고 열어서 4320양식을 인쇄합니다.
인쇄할 때 PDF 프린터를 이용해서 PDF로 만들어줍니다.
이 PDF를 아래와 같은 사이트에서 pptx로 변환하면 됩니다.
https://www.adobe.com/kr/acrobat/online/pdf-to-ppt.html https://online2pdf.com/pdf2pptx#
그리고 VBA에서 처리하기 쉽게
제목, 부서, 년도, 문서철이름1,문서철이름1 도형의 이름을 지정하고 그룹으로 묶어줍니다.
반드시 그룹으로 묶어줘야 매크로가 해당 그룹을 하나의 세트로 인식해서 처리합니다.
여기서는 간단히 title, dept, year, cat1, cat2 라는 이름으로 도형이름을 설정하고 그룹 이름도 1,2,3,4로 지정했습니다.
그리고 폰트 종류나 폰트 크기, 자간, 줄간격, 가로/세로 정렬, 텍스트 방향 등을 미리 설정해줍니다.
현재는 도형의 선이 보이는데 실제 작업에서는 도형 윤곽선을 '없음'으로 설정하세요.
|

여기서 첫번째 그룹의 도형의 텍스트나 도형 속성을 다른 그룹에 일괄로 적용하는 VBA를 이용하면 편리합니다.
첨부파일의 Z_CopyGroupChildFormat() 라는 매크로를 이용하면 됩니다.
첫번째 그룹의 내부도형의 폰트, 정렬, 간격, 여백 등을 나머지 그룹에도 복제/적용해줍니다.
Sub Z_CopyGroupChildFormat()
Dim sld As Slide
Dim srcGrp As Shape
Dim grp As Shape
Dim srcChild As Shape
Dim tgtChild As Shape
Set sld = ActiveWindow.View.Slide
' 슬라이드에서 첫 번째 그룹을 기준 그룹으로 설정
For Each grp In sld.Shapes
If grp.Type = msoGroup Then
Set srcGrp = grp
Exit For
End If
Next grp
If srcGrp Is Nothing Then
MsgBox "슬라이드에 그룹 도형이 없습니다."
Exit Sub
End If
For Each grp In sld.Shapes
If grp.Type = msoGroup And grp.Name <> srcGrp.Name Then
For Each srcChild In srcGrp.GroupItems
Set tgtChild = Nothing
On Error Resume Next
Set tgtChild = grp.GroupItems(srcChild.Name)
On Error GoTo 0
If Not tgtChild Is Nothing Then
srcChild.PickUp
tgtChild.Apply
tgtChild.TextFrame.TextRange.Text = srcChild.TextFrame.TextRange.Text
End If
Next srcChild
End If
Next grp
MsgBox "첫번째 그룹의 서식 적용 완료"
End Sub
2. 그 다음 엑셀 목록을 준비합니다.
엑셀 1행의 각 열 제목은 기준 슬라이드의 그룹도형 내부의 각각 도형의 이름과 같아야 합니다.

3. Alt+F8을 누르고 A_FillSlidesFromExcel 매크로를 실행합니다.
파일선택 대화창이 열리면 대상 엑셀목록 파일을 선택합니다.

그러면 엑셀 내용대로 기준 슬라이드를 복제해서 각 도형에 내용을 채워줍니다.
아래처럼 1슬라이드가 복제되어 엑셀 내용대로 각 라벨 내용이 채워집니다.

도형의 선을 없애거나 폰트를 변경하려면
기준 슬라이드인 1슬라이드를 수정하고
다시 매크로를 실행해서
기존 슬라이드를 없애고 다시 생성하면 됩니다.
만약 기존 양식을 변경하거나 라벨 내용을 추가하려면 1슬라이드에 그룹 도형에 내부 도형을 추가하고
엑셀 파일에도 열을 추가하면 됩니다. 열 제목과 추가된 그룹내부도형의 이름이 같아야 합니다.
4. 이제 4320라벨지를 충분히 용지함에 넣고 인쇄합니다.
단면인쇄이고 숨겨진 슬라이드는 제외합니다.
전체페이지 슬라이드 누르고 '용지에 맞게 크기 조정'에 체크를 하게 되면
기존 크기보다 작아져서 폼 용지 틀에 맞지 않을 수 있으니 '용지에 맞게 크기 조정'에 체크 해제되어 있는지 확인하세요.

메인 VBA코드:
Option Explicit
Sub A_FillSlidesFromExcel()
Dim fd As FileDialog
Dim xlApp As Object, xlWb As Object, xlWs As Object
Dim xlPath As String
Dim baseSld As Slide, curSld As Slide
Dim shp As Shape, child As Shape, grps() As Shape
Dim grpCount&, i&, lastRow&, lastCol&, r&, c&, pos&, usedCount&
Dim headers() As String
'0. 슬라이드가 2개 이상이면 기존 슬라이드 삭제 여부 확인
If ActivePresentation.Slides.Count >= 2 Then
If MsgBox("기존 슬라이드가 있습니다." & vbCrLf & _
"1번 슬라이드를 제외한 모든 슬라이드를 삭제할까요?", _
vbYesNo + vbQuestion, "슬라이드 삭제 확인") = vbYes Then
For i = ActivePresentation.Slides.Count To 2 Step -1
ActivePresentation.Slides(i).Delete
Next i
End If
End If
' 1. 파일 열기 대화창
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "대상 엑셀 파일을 선택하세요"
.AllowMultiSelect = False
.InitialFileName = ActivePresentation.Path & "\"
.Filters.Clear
.Filters.Add "Excel 파일", "*.xlsx; *.xlsm; *.xls"
If .Show <> -1 Then Exit Sub ' 취소 시 종료
xlPath = .SelectedItems(1)
End With
Set baseSld = ActivePresentation.Slides(1)
' 2. 기준 슬라이드의 그룹 도형 개수 미리 세기
grpCount = 0
For Each shp In baseSld.Shapes
If shp.Type = msoGroup Then grpCount = grpCount + 1
Next shp
If grpCount = 0 Then
MsgBox "1번 슬라이드에 그룹 도형이 없습니다."
Exit Sub
End If
On Error GoTo CleanUp
' 3. 엑셀 열기
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = False
Set xlWb = xlApp.Workbooks.Open(xlPath, , True) ' 읽기 전용
Set xlWs = xlWb.Worksheets(1)
lastRow = xlWs.Cells(xlWs.Rows.Count, "A").End(-4162).Row ' xlUp
lastCol = xlWs.Cells(1, xlWs.Columns.Count).End(-4159).Column ' xlToLeft
If lastRow < 2 Then
MsgBox "데이터 행이 없습니다."
GoTo CleanUp
End If
' 1행 헤더(자식 도형 이름) 읽기
ReDim headers(1 To lastCol)
For c = 1 To lastCol
headers(c) = Trim(CStr(xlWs.Cells(1, c).Value))
Next c
ReDim grps(1 To grpCount)
' 4. A열 기준 2행 ~ 마지막 행 순환
For r = 2 To lastRow
pos = (r - 2) Mod grpCount ' 0 ~ grpCount-1
' 첫 번째 그룹이거나 기존 슬라이드의 그룹을 모두 소진했으면 새 슬라이드 추가
If pos = 0 Then
Set curSld = baseSld.Duplicate(1)
curSld.MoveTo ActivePresentation.Slides.Count
' 새 슬라이드의 그룹 도형 수집
i = 0
For Each shp In curSld.Shapes
If shp.Type = msoGroup Then
i = i + 1
Set grps(i) = shp
End If
Next shp
End If
' 그룹 내부 도형 중 헤더와 이름이 같은 도형에 값 입력
For Each child In grps(pos + 1).GroupItems
For c = 1 To lastCol
If headers(c) <> "" Then
If child.Name = headers(c) Then
If child.HasTextFrame Then
child.TextFrame.TextRange.Text = CStr(xlWs.Cells(r, c).Text)
End If
End If
End If
Next c
Next child
curSld.SlideShowTransition.Hidden = msoFalse '슬라이드 숨기기 취소
usedCount = pos + 1
Next r
' 5. 마지막 슬라이드에서 값이 채워지지 않은 그룹은 텍스트 제거
For i = usedCount + 1 To grpCount
For Each child In grps(i).GroupItems
If child.HasTextFrame Then
child.TextFrame.TextRange.Text = ""
End If
Next child
Next i
' 6. 1번 슬라이드 숨김
baseSld.SlideShowTransition.Hidden = msoTrue
' 7. 인쇄 옵션: 숨김 슬라이드 인쇄 안 함
ActivePresentation.PrintOptions.PrintHiddenSlides = msoFalse
MsgBox (lastRow - 1) & "개 행 처리 완료 (슬라이드 " & _
ActivePresentation.Slides.Count - 1 & "장 생성)"
CleanUp:
If Err.Number <> 0 Then MsgBox "오류 발생: " & Err.Description
On Error Resume Next
If Not xlWb Is Nothing Then xlWb.Close False
If Not xlApp Is Nothing Then xlApp.Quit
Set xlWs = Nothing: Set xlWb = Nothing: Set xlApp = Nothing
End Sub
4320.pptm과 4320목록.xls 파일을 첨부합니다.

- Graphics generated by Gemini(tm)
- VBA coded by Claude(tm)
'XLS+VBA' 카테고리의 다른 글
| 엑셀에서 EAN-13, CODE-39, CODE-128B 바코드 생성 (0) | 2026.10.10 |
|---|---|
| 엑셀 파일들의 시트들을 하나의 파일에 통합하기 (0) | 2026.09.17 |
| 엑셀링크목록 브라우저 북마크에 일괄로 추가하기 (0) | 2026.03.18 |
| 실시간 도서 ISBN 코드로 재고 수량 조회 (0) | 2026.03.07 |
| 멜론 노래 정보 가져와서 음악파일명 일괄 변경하기 (0) | 2026.03.02 |
| 엑셀 데이터를 다른 창 입력란에 자동으로 일괄 붙여넣기 (0) | 2026.01.22 |
| 엑셀로 영상 편집하기? (1) | 2025.12.15 |
| 엑셀에서 취소선 대신 화살표 등 도형 표시 (0) | 2025.10.14 |
최근댓글