Want to replace the text across a presentation?
That’s exactly what LinkedIn member Kerri recently wanted to do so we put on our thinking caps to come up with a solution.
I have a selection of slides I would like to use in a portfolio, but as the text is confidential, I would like to make it illegible – i have seen presentations where the text has been converted into something that looks like Latin – Does anyone please know how I can do this?
The Solution
The VBA macro at the end of this post can be used freely (without warranty) to replace all visible text across a presentation. This is what it does:
- For every visible slide, it looks at every visible object on that slide, including placeholders, text boxes, shapes, tables, charts and groups.
- If the object has text in it it then replaces each character in the text with sequenced characters from a pre-defined Lorem Ipsum string (which you can replace with something else if you want).
- Once finished, it tells you how many characters were replaced across the presentation.
- If you’re not happy with the result, you can just press Ctrl+Z to undo the changes.
Supported Objects
The macro has been updated and now supports the following:
– Text boxes – Shapes* (rectangles, circles, freeform etc.) – Placeholders (excluding slide numbers) – Tables – Charts (chart/axes titles and data point text only, legend is hidden, axes values have to be changed in the source data)Shapes
Modes
– Choose to start the substitution for each new shape from the beginning of the Lorem text or continue from the last shape
Options
Change the default Lorem text.
*Note that SmartArt and certain chart features are not supported in this free version. Contact us if you’d like a fully feature add-in, accessible from the PowerPoint ribbon, complete with support and warranty.
Supported Platforms
The macro has been tested with some but not all of the configurations below.
PowerPoint : This macro will run on PowerPoint 2013, 2010, 2007 and 2011* for the Mac and supports both 32 and 64 bit versions of PowerPoint 2013 and 2010.
Windows OS : This macro will run under Microsoft Office on Windows 8, 7, Vista and XP (SP2) and supports both x86 and x64 versions.
*Mac OS : this macro will run on Mac OS X 10.4 and above with modification to the chart features.
How To Use
To add our ReplaceTextWithLorem macro, follow these steps:
- Open the presentation in which you want to change the fonts to use your theme
- Press Alt+F11 to open the VBE (Visual Basic Editor)*
- Right click on your presentation (you should see it in the top left of the VBE)
- Hover over Insert and then click Module
- Copy the macro code at the end of this post into the module window:

- Close the VBE window
- Back in your presentation, press Alt+F8 and you will see a window containing the macro which you can select before clicking Run:

- This will then remind you what you’re about to do and give you the option to cancel:

*You may also want to enable the Developer tab in the PowerPoint ribbon if you can’t see it as it adds all the VBA tools you need.
Result
Here’s a before and after view of the downloadable sample deck, which includes the macro:
License
The code is provided at no cost under the terms of the Creative Commons Attribution license which means you must attribute the work to us. You may do this on one of two ways:
- Copy the code below and include the opening copyright section comments
- Include the following text and link on at least one slide within your presentation and/or web page where the content resides:Macro design from youpresent.co.uk by GMARK
The All Important Macro
You can copy the code directly from below, download the macro in its purest text form or download the sample presentation corresponding to the screenshot above, which includes the macro within the file:
Download PowerPoint Sample Presentation
'---------------------------------------------------------------------
' Copyright (c) 2013 YOUpresent Ltd.
'
' Macro to replace all text in supported shapes* across a presentation
' with Lorem Ipsum text.
'
' Processes all visible shapes on all visible slides.
'
' Supported shapes:
' - Textboxes
' - Shapes (rectangles, circles, freeform etc.)
' - Placeholders (excluding slide numbers)
' - Tables
' - Charts (chart/axes titles and data point text only, legend is hidden, axes values have to be changed in the source data)
'
' Unsupported shapes:
' - SmartArt
'
' Written By : Jamie Garroch
' Date : 11th November 2013
' Website : http://youpresent.co.uk and http://www.gmark.co
'
'---------------------------------------------------------------------
Option Explicit
' Start of module level definitions
Private Const loremDefault = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. " & _
"Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. " & _
"Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus. " & _
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci."
Private lorem As String
Private curSlide As Integer
Private counter As Single
Private Const MSG_STATUS = "GMARK_Status_Message"
Private restartLorum As VbMsgBoxResult
Private loremCounter As Integer
' End of module level definitions
Public Sub ReplaceTextWithLorem()
On Error GoTo errorhandler
Dim response
Dim osld As Slide
Dim oshp As Shape
Dim ogrp As Shape
Dim oRefresh As Shape
' Get a reference to the current slide
curSlide = ActiveWindow.View.Slide.SlideIndex
' Add a temporary message to the current slide
AddStatusMessage
response = MsgBox("This macro replaces text across a presentation with Lorem Ipsum text." & Chr(13) & Chr(13) & _
"It processes the following:" & Chr(13) & Chr(13) & _
" - All visible slides" & Chr(13) & _
" - All visible shapes (including placeholders, but not slide numbers)" & Chr(13) & _
" - All visible groups" & Chr(13) & _
" - All visible tables" & Chr(13) & _
" - All visible charts (chart/axes titles and data point text only, legend is hidden, axes values have to be changed in the source data)" & Chr(13) & Chr(13) & _
"It is not designed to change SmartArt or Pictures.", _
vbOKCancel + vbInformation, "GMARK Macro : Lorem Ipsum by youpresent.co.uk")
If response = vbCancel Then
DeleteStatusMessage
Exit Sub
End If
restartLorum = MsgBox("Do you want to restart the Lorum text substitution with each new shape that is found?", _
vbYesNo + vbQuestion, "How do you want to process the text?")
lorem = InputBox("Change the default substitution text if required:", "Substitution Text", loremDefault)
If lorem = "" Then
MsgBox "The substitution text cannot be empty!", vbOKOnly + vbCritical, "Stopping..."
Exit Sub
End If
counter = 0
For Each osld In ActivePresentation.Slides
ActiveWindow.View.GotoSlide osld.SlideIndex
DoEvents
' If the slide is visible, process it
If osld.SlideShowTransition.Hidden = msoFalse Then
For Each oshp In osld.Shapes
' If the shape is visible, process it
If oshp.Visible = msoTrue Then
'oshp.Select msoTrue
'DoEvents
Select Case oshp.Type
Case msoGroup
For Each ogrp In oshp.GroupItems
SwapCharacters ogrp
Next
Case msoPlaceholder
If Not oshp.PlaceholderFormat.Type = ppPlaceholderSlideNumber Then
If oshp.HasChart Then ProcessChart oshp.Chart, oshp.Parent.SlideIndex
'If oshp.HasSmartArt Then
If oshp.HasTable Then ProcessTable oshp
If oshp.HasTextFrame Then SwapCharacters oshp
End If
Case msoTable
ProcessTable oshp
Case msoChart
ProcessChart oshp.Chart, oshp.Parent.SlideIndex
Case Else
SwapCharacters oshp
End Select
End If
' Delete/comment out the next 3 lines to speed things up but remove on-screen viewing of changes
If osld.SlideIndex > 1 Then ActiveWindow.View.GotoSlide osld.SlideIndex - 1
ActiveWindow.View.GotoSlide osld.SlideIndex
DoEvents
Next
End If
Next
DeleteStatusMessage
MsgBox counter & " characters have been replaced across this presentation." & Chr(13) & Chr(13) & _
"Click OK and check the result. Press Ctrl+Z to revert the changes.", vbOKOnly + vbInformation, "Finished!"
Exit Sub
errorhandler:
response = MsgBox("Uh oh. There was an unexpected error. with:" & Chr(13) & Chr(13) & _
"Slide : " & oshp.Parent.SlideIndex & Chr(13) & _
"Shape : " & oshp.Name & Chr(13) & Chr(13) & _
"Ignore this error?" & Chr(13) & Chr(13) & _
"Error : " & Err.Number & ", " & Err.Description, vbYesNo + vbCritical, "Macro Error")
If response = vbYes Then
Resume Next
Else
DeleteStatusMessage
End If
End Sub
Private Sub ProcessTable(oshp As Shape)
Dim lRow As Long, lCol As Long
Dim oCellShp As Shape
With oshp.Table
For lRow = 1 To .Rows.Count
For lCol = 1 To .Columns.Count
SwapCharacters .Cell(lRow, lCol).Shape, True, "[R:" & CStr(lRow) & ", C:" & CStr(lCol) & "]"
Next
Next
End With
End Sub
Private Sub ProcessChart(oChart As Chart, Optional ParentSlideIndex As Integer)
Dim oSeries As Object 'Series
Dim oDataPoint As Object 'Point
Dim oAxis As Object 'Axis
' Number of series : oChart.SeriesCollection.Count
' Number of data points : oChart.SeriesCollection(1).Points.Count
' Point HasDataLabel : oChart.SeriesCollection(1).Points(1).HasDataLabel
' Point Data Label : oChart.SeriesCollection(1).Points(1).DataLabel.Text
With oChart
' Process the chart title if it exists
If .HasTitle Then .ChartTitle.text = SwapText(.ChartTitle.text, ParentSlideIndex)
' Process the axes title text if any exists
For Each oAxis In .Axes
' .Axes(xlCategory, xlPrimary).HasTitle
' .Axes(xlValue, xlPrimary).HasTitle
If oAxis.HasTitle Then oAxis.AxisTitle.text = SwapText(oAxis.AxisTitle.text, ParentSlideIndex)
Next
' Process the axes category text if any exists
' -> Can't do this without changing the data
' Process the legend text if any exists
' -> Can't do this without changing the data so just hide it
If .HasLegend Then .HasLegend = False
' Process the data label text if any exists
For Each oSeries In oChart.SeriesCollection
For Each oDataPoint In oSeries.Points
With oDataPoint
If .HasDataLabel Then .DataLabel.text = SwapText(.DataLabel.text, ParentSlideIndex)
End With
Next
Next
End With
End Sub
Private Function SwapText(text As String, Optional ParentSlideIndex As Integer) As String
Dim sourceChar As Integer
Dim newChar As Integer
For sourceChar = 1 To Len(text)
If restartLorum = vbNo Then loremCounter = loremCounter + 1
If loremCounter > Len(lorem) Then loremCounter = 1
newChar = IIf(restartLorum = vbYes, sourceChar Mod (Len(lorem) + 1), loremCounter)
If newChar = 0 Then newChar = 1
' Spew out the characters in the VBE immediate window (Ctrl+G) for debugging
Debug.Print Mid(text, sourceChar, 1) & ":" & AscW(Mid(text, sourceChar, 1)) & "->"; Mid(lorem, newChar, 1) & _
" from slide:" & ParentSlideIndex & ", shape:" & "Chart"
' Replace the character
Mid(text, sourceChar, 1) = Mid(lorem, newChar, 1)
counter = counter + 1
Next
SwapText = text
End Function
Private Sub SwapCharacters(swapShp As Shape, Optional shapeTypeCell As Boolean, Optional tableCellRef As String)
Dim sourceChar As Integer
Dim newChar As Integer
Dim shpRef As String
' Skip the name check as table cells don't support this shape method
If shapeTypeCell = True Then GoTo skipNameCheck
' If the non-table-cell shapes is not the status message shape, process it
If swapShp.Name = MSG_STATUS Then Exit Sub
skipNameCheck:
With swapShp
' If the shape has a text frame, process it
If .HasTextFrame Then
With .TextFrame
' If the textframe has text, process it
If .HasText Then
With .TextRange
' Loop through the text, searching each character individually
For sourceChar = 1 To Len(.text)
If restartLorum = vbNo Then loremCounter = loremCounter + 1
If loremCounter > Len(lorem) Then loremCounter = 1
newChar = IIf(restartLorum = vbYes, sourceChar Mod (Len(lorem) + 1), loremCounter)
If newChar = 0 Then newChar = 1
Select Case AscW(.Characters(sourceChar, 1))
' Don't replace non-printable characters
Case 9, 10, 11, 13 ' TAB, CR, LF, VTAB
' Do nothing
Debug.Print AscW(.Characters(sourceChar, 1))
Case Else
' Spew out the characters in the VBE immediate window (Ctrl+G) for debugging
If shapeTypeCell = True Then shpRef = tableCellRef Else shpRef = swapShp.Name
Debug.Print .Characters(sourceChar, 1) & ":" & AscW(.Characters(sourceChar, 1)) & "->"; Mid(lorem, newChar, 1) & _
" from slide:" & swapShp.Parent.SlideIndex & ", shape:" & shpRef
' Replace the character
.Characters(sourceChar, 1) = Mid(lorem, newChar, 1)
counter = counter + 1
End Select
Next
End With
End If
End With
End If
End With
End Sub
Private Sub AddStatusMessage()
Dim slideWidth As Integer
Dim slideHeight As Integer
Dim msgShape As Shape
On Error Resume Next
slideWidth = ActivePresentation.PageSetup.slideWidth
slideHeight = ActivePresentation.PageSetup.slideHeight
With ActivePresentation.Slides(curSlide).Shapes
Set msgShape = .AddShape(msoShapeRectangle, 0, 0, slideWidth, slideHeight)
With msgShape
.Name = MSG_STATUS
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0.3
With .TextFrame.TextRange
.text = "processing shapes..." & Chr(13) & Chr(13) & "(may take a LONG time)"
With .Font
.Name = "Calibri"
.Size = 60
.Color.RGB = RGB(255, 255, 255)
End With
End With
End With
End With
ActiveWindow.ViewType = ppViewNormal
ActiveWindow.View.GotoSlide curSlide
DoEvents
End Sub
Private Sub DeleteStatusMessage()
On Error Resume Next
ActivePresentation.Slides(curSlide).Shapes(MSG_STATUS).Delete
loremCounter = 0
ActiveWindow.View.GotoSlide curSlide
End Sub

Hey, I have noticed that occasionally this site displays a 404 server error. I thought that you would be keen to know. All the best
Thanks Narl for the 404 report. We had two conflicting plugins on our WordPress site and have just turned one off so hopefully that will fix it but if you have a URL that repeatedly retires a 404 error, we’d love to fix it!