.etc

파워포인트 특정 텍스트 박스, 한 번에 싹 지우는 VBA 매크로

빈형임 2025. 10. 24. 17:55

이런 분들에게 필요합니다.

  • 수백 장의 파워포인트 강의 자료를 만들었는데, 특정 목차나 제목을 일괄 삭제해야 할 때
  • 회사 소개서 템플릿을 업데이트하면서, 이전 버전의 슬로건이나 푸터(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)' 과정을 거칩니다.

  1. 텍스트 박스 안의 모든 **줄바꿈 문자(vbCrLf)**를 공백으로 바꿉니다.
  2. 여러 개의 연속된 공백 (" ")을 하나의 공백(" ")으로 압축합니다.
  3. 앞뒤의 불필요한 공백을 Trim()으로 제거합니다.

위 코드를 복사하여 여러분의 파워포인트 매크로 모듈에 붙여넣으세요.

 
 

 

매크로 사용 방법 (5단계)

1.  [중요] 원본 파일 백업: 매크로 실행은 '되돌리기(Ctrl+Z)'가 불가능합니다. 반드시 파일의 사본을 만들어서 테스트하세요.

2. VBA 편집기 열기: 파워포인트를 열고 Alt + F11 키를 눌러 VBA 편집기 창을 엽니다.

 

 

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

 

 

 

4. 코드 붙여넣기 및 수정:

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

 

 

5. 매크로 실행:

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

 

 

팁: 이 매크로를 나중에도 계속 사용하려면, 파일을 저장할 때 'PowerPoint 매크로 사용 프레젠테이션(*.pptm)' 형식으로 저장해야 합니다.