만약 1번 슬라이드는 표지로, 2번 슬라이드부터 페이지 번호가 1번이 되게 하고 싶을 때는 아래와 같은 방법이 있습니다.

 

1. 일단 디자인 - 슬라이드 크기에서 시작 슬라이드번호를 최소로 하면 0으로 바꿀 수 있습니다.

2. 그리고 슬라이드 번호 삽입할 때 제목슬라이드는 제외할 수 있기 때문에 0페이지는 제목슬라이드 레이아웃을 적용한 후에 아래처럼 슬라이드 번호를 삽입합니다.

 



그런데 예를 들어 1번 슬라이드는 표지로, 2번 슬라이드는 목차를 넣고, 이제 3번 슬라이드부터 페이지 번호가 1번이 되게 하고 싶을 때는 위 기능을 이용해도 3번 슬라이드는 2페이지가 최선입니다.  파워포인트 기본 기능으로는 방법이 없습니다. 

 

이런 경우에 일전에 슬라이드 번호를 구역별로 넣거나 

숨겨진 슬라이드를 제외하고 보이는 슬라이드만 슬라이드 번호를 넣는 VBA를 소개한 적이 있습니다.

1, 2번 슬라이드를 숨기고 나머지 페이지만 슬라이드 번호를 VBA로 넣는 방법입니다.

 


이번에는 숨김여부와 상관없이 초반부 슬라이드는 슬라이드 번호를 삭제하고 원하는 특정 페이지부터 슬라이드 번호를 삽입하는 VBA를 소개합니다. 지난번 슬라이드 번호 넣는 코드를 좀 더 가다듬었습니다.

 

코드보기

더보기

 

'시작 페이지 지정
Dim PageStart As Integer

Sub ArrangeSlideNumber()
    
    Dim usr As String
    Dim pres As Presentation
    Dim sld As Slide
    Dim shp As Shape, shpNo As Shape
    Dim i As Long
    Dim l!, t!, w!, h!
    Dim Found As Boolean

    Set pres = ActivePresentation
    '시작 슬라이드 번호 설정
    pres.PageSetup.FirstSlideNumber = 1
    
    usr = InputBox("시작 슬라이드 번호를 입력하세요." & vbCr _
        & "(3을 입력하면 1,2슬라이드는 번호를 삭제하고 3슬라이드부터 번호를 일괄 입력합니다):", _
        "슬라이드 번호 일괄 입력", ActiveWindow.Selection.SlideRange(1).SlideIndex)
    If IsNumeric(usr) Then
    	PageStart= Cint(usr)
        If PageStart >= 1 And PageStart <= pres.Slides.Count Then
             
        Else
            MsgBox "슬라이드 범위를 벗어납니다.(1~" & pres.Slides.Count & ")"
            Exit Sub
        End If
    Else
        Exit Sub
    End If
    
    For Each sld In pres.Slides
        Found = False
        For i = sld.Shapes.Count To 1 Step -1
            If sld.Shapes(i).Type = msoPlaceholder Then
                If sld.Shapes(i).PlaceholderFormat.Type = ppPlaceholderSlideNumber Then
                    If sld.SlideIndex < PageStart Then
                        sld.Shapes(i).Delete
                    Else
                        Found = True
                        AddPageNumber sld.Shapes(i)
                    End If
                End If
            End If
        Next i
        
        '페이지 번호가 없으면 삽입
        If Not Found And sld.SlideIndex >= PageStart Then
        
            Set shpNo = Nothing
            With sld.CustomLayout.Shapes.Placeholders
                For i = 1 To .Count
                    If .Item(i).Type = msoPlaceholder Then
                        If .Item(i).PlaceholderFormat.Type = ppPlaceholderSlideNumber Then
                            Set shpNo = .Item(i)
                            Exit For
                        End If
                    End If
                Next i
            End With
            '레이아웃에 페이지 번호가 있으면
            If Not shpNo Is Nothing Then
                l = shpNo.Left
                t = shpNo.Top
                w = shpNo.Width
                h = shpNo.Height
                Set shp = sld.Shapes.AddPlaceholder(ppPlaceholderSlideNumber, l, t, w, h)
                AddPageNumber shp
            End If
            
         End If
    
    Next sld

End Sub

Function AddPageNumber(oShp As Shape)

    Dim sld As Slide
    Set sld = oShp.Parent
    With oShp.TextFrame.TextRange
        '.InsertSlideNumber
        .Text = sld.SlideIndex - PageStart + 1 '실제 슬라이드 번호 - 2
        '.Font.Size = 20
        '.Font.Name = "Arial"
        '.Font.Color.RGB = rgbBlack
    End With
    
End Function

 

시작 슬라이드 번호를 묻는 질문대화창이 뜨면

"3"을 입력하면 1,2슬라이드의 페이지 번호는 삭제하고

3슬라이드부터 1페이지로 슬라이드레이아웃의 페이지번호양식대로 페이지 번호를 삽입해줍니다.

시작 슬라이드 번호는 슬라이드 범위 내의 아무 숫자나 가능합니다.

 

 페이지 번호 형식을 단순한 숫자가 아니라 "1/10", "3 / 8" 형식으로 하려면 마지막 부분을 아래처럼 고쳐주세요.

.Text = (sld.SlideIndex - PageStart + 1) & " / " & (sld.Parent.Slides.Count - PageStart + 1)

 

슬라이드번호의 서식은 각 슬라이드에 적용된 슬라이드마스터 레이아웃의 슬라이드번호 의 양식을 따라갑니다.

위 코드 맨 아래부분에서 임의로 폰트나 글자크기 등을 바꿔줄 수도 있습니다.

매크로는 더이상 필요 없으면 제외하고 일반 .pptx 로 저장해도 무방합니다.

만일 슬라이드 번호를 일괄 삭제하려면 원래 방법대로 아래처럼 삽입-슬라이드번호 에서 슬라이드 번호에 체크를 해제하고 모두 적용을 눌러주면 됩니다.

 

pptm파일은 다운로드 받은 후에 속성에서 차단해제 적용/확인하시고

파일을 열 때 반드시 매크로를 허용해서 열어야 작동합니다.

 

PageNumberA3.pptm
0.09MB

 

만약 특정 페이지부터 페이지 번호를 시작하되

페이지 번호를 왼쪽과 오른쪽으로 번갈아가면서 삽입되게 하려면

링크한 지식인 답변을 참고하세요.

 

[2022.05.08]

페이지 번호 형식을 1/50 형태로 하고 싶은 경우 혹은 숨긴 슬라이드를 제외하고 페이지 번호를 넣고 싶은 경우는 첨부 파일을 이용하세요.

 

1/50형식의 페이지 번호 삽입

PageNumberA4.pptm
0.10MB

 

[2022.05.08]

다음 첨부파일은 슬라이드를 추가/삭제할 때마다 슬라이드 번호가 실시간으로 수정되는 예시입니다.

 

실시간 슬라이드 번호 업데이트

아래처럼 클래스를 추가하고

 

더보기
Public WithEvents App As PowerPoint.Application

Sub Class_Initialize()

    Set App = PowerPoint.Application

End Sub

'Sub App_PresentationNewSlide(ByVal oSld As Slide)
'
'    Call ArrangeSlideNumber
'
'End Sub

Sub App_SlideSelectionChanged(ByVal oSldRng As SlideRange)

    Call ArrangeSlideNumber

End Sub

 

모듈 내부에 아래 초기화 내용을 넣고 

더보기
Dim HostObj As Class1

Sub onLoad()
    Set HostObj = New Class1
End Sub

 

아래 내용을 CustomUI.xml에 추가하여 리본메뉴가 초기화 될 때 onLoad를 실행하게 해서

SlideSelectionChanged 이벤트 클래스가 초기화되로록 합니다.

더보기
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="onLoad" ></customUI>

 

PageNumber_Auto1.pptm
0.11MB