이런 분들에게 필요합니다.
- 수백 장의 파워포인트 강의 자료를 만들었는데, 특정 목차나 제목을 일괄 삭제해야 할 때
- 회사 소개서 템플릿을 업데이트하면서, 이전 버전의 슬로건이나 푸터(footer) 텍스트를 모두 지워야 할 때
- "여기에 텍스트 입력", "임시 내용"처럼 가이드용으로 넣어둔 텍스트 박스를 최종본에서 한 번에 제거하고 싶을 때
코드와 사용방법이 아래에 있습니다.
파워포인트에서 100장이 넘는 슬라이드를 하나하나 넘겨가며 특정 텍스트 박스를 Delete 키로 지우는 작업을 해보셨나요...?
Ctrl+F (찾기) 기능은 텍스트를 찾을 수는 있지만, 그 텍스트가 포함된 '도형 객체' 자체를 삭제해주지는 않습니다.
이 지루하고 실수하기 쉬운 반복 작업을 1초 만에 끝내줄 강력한 VBA 매크로를 소개합니다.
Option Explicit
'
'==================================================================================
' 매크로 이름: DeleteSpecificTextBoxes
' 설명:
' 현재 활성화된 파워포인트 문서의 모든 슬라이드를 순회합니다.
' 텍스트 박스의 텍스트에서 줄바꿈, 탭, 여러 공백을 "정규화(정리)"한 후,
' 'deleteList' 배열에 지정된 문자열과 *정확히* 일치하는 텍스트 박스를 삭제합니다.
'
'==================================================================================
'
Sub DeleteSpecificTextBoxes()
' --- [ 사용자가 수정할 부분 ] ---
' 아래 'deleteList' 배열에 지우고 싶은 텍스트를 "정리된 최종본"으로 입력하세요.
' (예: "성능 테스트 및 부하 테스트")
Dim deleteList() As Variant
deleteList = Array( _
"지우고 싶은 문자열1", _
"지우고 싶은 문자열2", _
"지우고 싶은 문자열3", _
"....." _
)
' --------------------------------
Dim sld As Slide
Dim shp As Shape
Dim i As Long ' 도형 순회를 위한 인덱스 (역순)
Dim j As Long ' 배열 순회를 위한 인덱스
Dim shapeText As String
Dim deleteCount As Long
' 변수 초기화
deleteCount = 0
' 1. 프레젠테이션의 모든 슬라이드를 순회합니다.
On Error Resume Next ' 오류가 발생해도 매크로가 중지되지 않도록 함
For Each sld In ActivePresentation.Slides
' 2. 각 슬라이드의 모든 도형(Shape)을 *역순*으로 순회합니다.
For i = sld.Shapes.Count To 1 Step -1
Set shp = sld.Shapes(i)
' 3. 해당 도형이 텍스트 프레임(텍스트 상자)을 가지고 있는지 확인
If shp.HasTextFrame Then
' 4. 텍스트 프레임 안에 텍스트가 있는지 확인
If shp.TextFrame.HasText Then
' 5. [개선됨] 텍스트를 가져와 "정규화" (Cleaning)
shapeText = shp.TextFrame.TextRange.Text
' 5-1. 모든 종류의 줄바꿈 문자(CRLF, CR, LF)를 단일 공백으로 변경
shapeText = Replace(shapeText, vbCrLf, " ")
shapeText = Replace(shapeText, vbCr, " ")
shapeText = Replace(shapeText, vbLf, " ")
' 5-2. 탭 문자를 단일 공백으로 변경
shapeText = Replace(shapeText, vbTab, " ")
' 5-3. 여러 개의 연속된 공백을 단일 공백으로 변경
Do While InStr(shapeText, " ") > 0
shapeText = Replace(shapeText, " ", " ")
Loop
' 5-4. 마지막으로 앞뒤 공백 제거
shapeText = Trim(shapeText)
' 6. 'deleteList' 배열을 순회하며 일치하는 항목이 있는지 확인
For j = LBound(deleteList) To UBound(deleteList)
If shapeText = CStr(deleteList(j)) Then
' 7. 정확히 일치하는 텍스트를 찾으면 도형을 삭제합니다.
shp.Delete
deleteCount = deleteCount + 1
' 일치 항목을 찾았으므로 더 이상 이 도형을
' 배열과 비교할 필요가 없음 (다음 도형으로 이동)
Exit For
End If
Next j
End If
End If
Next i ' 다음 도형
Next sld ' 다음 슬라이드
On Error GoTo 0 ' 오류 처리 기본값 복원
' 8. 완료 메시지 표시
MsgBox "총 " & deleteCount & "개의 텍스트 박스를 삭제했습니다.", vbInformation, "매크로 실행 완료"
End Sub
오늘 소개할 코드는 이 문제를 해결하기 위해 '텍스트 정규화(Normalization)' 과정을 거칩니다.
- 텍스트 박스 안의 모든 **줄바꿈 문자(vbCrLf)**를 공백으로 바꿉니다.
- 여러 개의 연속된 공백 (" ")을 하나의 공백(" ")으로 압축합니다.
- 앞뒤의 불필요한 공백을 Trim()으로 제거합니다.
위 코드를 복사하여 여러분의 파워포인트 매크로 모듈에 붙여넣으세요.
매크로 사용 방법 (5단계)
1. [중요] 원본 파일 백업: 매크로 실행은 '되돌리기(Ctrl+Z)'가 불가능합니다. 반드시 파일의 사본을 만들어서 테스트하세요.
2. VBA 편집기 열기: 파워포인트를 열고 Alt + F11 키를 눌러 VBA 편집기 창을 엽니다.

3. 모듈 삽입: 왼쪽 '프로젝트 탐색기' 창에서 현재 파일 이름을 마우스 오른쪽 버튼으로 클릭 후, 삽입(Insert) > 모듈(Module)을 선택합니다.

4. 코드 붙여넣기 및 수정:
- 오른쪽에 나타난 Module1 창에 위 코드를 모두 복사하여 붙여넣습니다.
- 코드 상단의 [ 사용자가 수정할 부분 ]을 찾아, deleteList = Array(...) 괄호 안에 본인이 삭제를 원하는 텍스트 목록으로 수정합니다.
- [주의사항] 한/영 설정에 따라 문자가 입력되지 않을 수 있습니다.

5. 매크로 실행:
- 파워포인트 창으로 돌아와 Alt + F8 키를 누릅니다.(혹은 편집창에서 재생 버튼을 클릭합니다.)
- DeleteSpecificTextBoxes 매크로를 선택하고 실행(Run) 버튼을 클릭합니다.
- 작업이 완료되면 삭제된 텍스트 박스의 개수를 알려주는 메시지 창이 뜹니다.

팁: 이 매크로를 나중에도 계속 사용하려면, 파일을 저장할 때 'PowerPoint 매크로 사용 프레젠테이션(*.pptm)' 형식으로 저장해야 합니다.
'.etc' 카테고리의 다른 글
| 개발자들은 왜 윈도우보다 맥을 더 선호할까? (0) | 2025.11.05 |
|---|---|
| [에러] 맥 환경에서 xcrun: error: invalid active developer path 에러 해결하기 (0) | 2025.04.06 |
| Anaconda 설치 가이드 (Mac) (0) | 2025.03.11 |
| Anaconda 설치 가이드 (Windows) (0) | 2025.03.11 |