Automatisch slide nummers toevoegen in PowerPoint
- 28/10/2020
Inleiding
Ik ben een PowerPoint presentatie aan het maken met slides voor een gedetailleerde TM1 / PA administrator training. Ik wilde de slide nummers toevoegen in de voettekst, maar meer dan dat. Ik wilde iets zoals onderstaand bereiken:
Die vind je terug rechts onderaan op de slide in de voettekst. Het toont het slide nummer als:
- slide nummer 147
- van in totaal 193 slides
- hoofdstuk 7
- van in totaal 10 hoofdstukken
- in het 7de hoofdstuk, is dit slide number 22
- van in totaal 42 slides in dit hoofdstuk
Elk hoofdstuk komt overeen met een sectie in de PowerPoint presentatie. Ik vind secties overigens een handige manier om een grote presentatie op te splitsen in kleinere delen. Voor uitgebreide presentaties vind ik het een goede manier om weer te geven "waar we zijn".
De vraag is nu: hoe kunnen we dit toevoegen in PowerPoint, op een geautomatiseerde manier ? Ik vond wel dadelijk het slide nummer, dat was makkelijk zat, maar wat met de andere tellers… ? Ik kwam tot de conclusie dat ik er VBA code moest voor schrijven. Aangezien ik het best een leuk stukje code vind, hier is het en kopieer het gerust! :-)
Sub Extended_Slide_Number_In_Footer()' Wim Gielis ' https://www.wimgielis.com''''' ' Code om slide nummers in PowerPoint toe te voegen ' 28/10/20 '''''Dim sld As Slide Dim shp As Shape Dim s As String With ActivePresentation If .SectionProperties.Count > 0 Then For Each sld In .Slides sld.HeadersFooters.Footer.Visible = True i = sld.sectionIndex 'loop to look for the shape for the page number For Each shp In sld.Shapes If shp.Type = msoPlaceholder Then If shp.PlaceholderFormat.Type = 15 Then 'ppPlaceholderFooter = 15 If GetFirstSlideNumber(.SectionProperties.Name(sld.sectionIndex)) = sld.SlideIndex Then s = "" Else s = "p. [p]/[p_cnt] (ch. [ch]/[ch_cnt]: [p_ch]/[p_ch_cnt])" s = Replace(s, "[p]", sld.SlideNumber) s = Replace(s, "[p_cnt]", .Slides.Count) s = Replace(s, "[ch]", i) s = Replace(s, "[ch_cnt]", .SectionProperties.Count) s = Replace(s, "[p_ch]", sld.SlideIndex - GetFirstSlideNumber(.SectionProperties.Name(i)) + 1) s = Replace(s, "[p_ch_cnt]", .SectionProperties.SlidesCount(i)) End If shp.TextFrame.TextRange = s End If End If Next Next End If End With MsgBox "Done !"End SubPublic Function GetFirstSlideNumber(ByVal sectionName As String) As Long' Returns the index of the first slide under the section "sectionName" ' Returns -1 if the section is not found or doesn't have any slides ' https://stackoverflow.com/questions/58529919/how-to-get-slide-number-of-first-slide-in-a-sectionWith ActivePresentation.SectionProperties Dim i As Long For i = 1 To .Count If .Name(i) = sectionName Then GetFirstSlideNumber = .FirstSlide(i) Exit Function End If Next End With ' Section not found GetFirstSlideNumber = -1End Function
Een extra complexiteit die ik toevoegde, is dat de eerste slide van elk nieuw hoofdstuk geen nummer krijgt. Dat deed ik uit esthetische oogpunt: de titelslide van een hoofdstuk bevat een grote foto, en het slide nummer zou dan een beetje in de weg komen te zitten.
Het zal met een kleine variatie op dit thema ook eenvoudig mogelijk zijn om de naam van het hoofdstuk / de sectie toe te voegen, mocht je dat willen. Misschien bestaat het reeds out of the box in PowerPoint, dat weet ik niet, maar tenminste in de code is het geen grote wijziging.
Mis ik hier nu iets ? Zou dit niet makkelijker moeten kunnen in PowerPoint ? Anyway, het werk werd gedaan, bedien jezelf !
Keep on Excelling (PowerPoint is per slot van rekening enkel maar een invoegtoepassing bovenop Excel) !