Bad design decisions haunt our lives. One poor choice was Microsoft’s selection of the text baseline for vertical bullet alignment in PowerPoint. Bigger bullets move up, smaller bullets move down, without any control in the user interface. I’m sure you’ve seen this effect as you change bullet size relative to text:
Fixing Vertical Bullet Alignment with VBA
There are a couple of ways to fix this issue. One is to download and install this free Add-in by John Wilson of PowerPoint Alchemy: Bullets Move Up and Down. The VBA code behind this add-in looks something like this:
Sub fixBulletAlignment() Dim oDes As Design Dim oMast As Master Dim L As Long Dim oCust As CustomLayout Dim oshp As Shape For Each oDes In ActivePresentation.Designs For Each oCust In oDes.SlideMaster.CustomLayouts For Each oshp In oCust.Shapes If oshp.Type = msoPlaceholder Then Select Case oshp.PlaceholderFormat.Type Case Is = ppPlaceholderBody, ppPlaceholderVerticalBody, ppPlaceholderObject For L = 1 To oshp.TextFrame.TextRange.Paragraphs.Count With oshp.TextFrame.TextRange.Paragraphs(L).ParagraphFormat .BaseLineAlignment = ppBaselineAlignCenter End With Next L End Select End If Next oshp Next oCust Next oDes MsgBox "Masters and layouts fixed", vbInformation, "PowerPoint Alchemy" End Sub
When this runs, it adds an over-ride to the text level definitions on each slide layout that has multi-level text (any layout containing a Content or Text placeholder).
<a:lstStyle> <a:lvl1pPr fontAlgn="ctr"> <a:defRPr/> </a:lvl1pPr> <a:lvl2pPr fontAlgn="ctr"> <a:defRPr/> </a:lvl2pPr> <a:lvl3pPr fontAlgn="ctr"> <a:defRPr/> </a:lvl3pPr> <a:lvl4pPr fontAlgn="ctr"> <a:defRPr/> </a:lvl4pPr> <a:lvl5pPr fontAlgn="ctr"> <a:defRPr/> </a:lvl5pPr> </a:lstStyle>
This is adequate for most purposes. With correctly aligned bullets, we now get this effect when we change the bullet size:
There are a couple of downsides to the VBA approach:
- You have to remember to apply it to each presentation or template.
- If you add a new layout, or add a new text or content placeholder to an existing layout, you’ll have to re-run the macro.
- Table text and text box text does not benefit, their bullets will still be wonky.
Fixing Vertical Bullet Alignment with XML Hacking
With XML hacking, we can fix this problem once and never have to think about it again. Start by unzipping a new blank template, then editing ppt\slideMasters\slideMaster1.xml. There are 3 sections to be edited: p:titleStyle (for all title placeholders), p:bodyStyle (for all text or content placeholders) and p:otherStyle (for table text).
The editing is the same for all sections: for each a:lvlXpPr section, where X is the level number, add fontAlgn=”ctr” to the definition. Here’s what it looks like before…
<a:lvl1pPr marL="0" indent="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
…and after editing:
<a:lvl1pPr fontAlgn="ctr" marL="0" indent="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
There are 19 level definitions in slideMaster1.xml to change. When you’re done that, open ppt\presentation.xml and make the same edit to the 9 levels of the p:defaultTextStyle section that controls formatting for text boxes and notes and handout pages.
When you’re done, rezip the XML files and rename the template blank.potx. Place it so it works as your default template, here’s an article from Steve Rindsberg with the details for each Office version. For PowerPoint 2016 and 2019 for Windows, follow the PowerPoint 2013 directions. For 2019 for Mac, use the Mac 2016 directions: Create your own default presentation.
Now that this is set in your default template, every new file created when PowerPoint opens will have the correct vertical bullet alignment. Please note that in PowerPoint for Windows, if you choose File>New>Blank Presentation, this autogenerates a new file that is not based on your default template. Such a file will have incorrect vertical bullet alignment.