I want to change the proofing language of all my slides in a Powerpoint. I've tried setting the language via the Language Preferences menu, however this only changes it for new powerpoints.
To change the language of the entire PowerPoint easily, open the View tab and select the Outline view.
- Ctrl+A to select all.
- Tools → Language → Choose your language to set.
Likewise while you have everything selected you can change other things like fonts, colours etc. Although of course in many case this is better done by changing the slide master, a presentation that has had many editors may have lots of 'hard' formatting set which deviates from the underlying master and needs resetting to be consistent. You can also reset individual slides to the master style, but this may result in placeholders moving as well, which may be undesirable in some situations.
- View → Outline → select all slides (in a left menu) via Ctrl+A.
- Review → Language → Set Proofing Language... → Choose your language to set.
As for me - PowerPoint restart was needed. Probably because I also did changed Editing Language:
- Review → Language → Set Proofing Language... → Language Preferences → Choose Editing Languages.
The existing answers work for text that is present in the outline. Unfortunately in my case this didn't cover a significant part of the text, including figures, tables, etc.
This macro solved the problem for me :
Sub ChangeProofingLanguageToEnglish() Dim j, k, m, scount, fcount, gcount As Integer scount = ActivePresentation.Slides.Count For j = 1 To scount fcount = ActivePresentation.Slides(j).Shapes.Count For k = 1 To fcount If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then ActivePresentation.Slides(j).Shapes(k) _ .TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS End If If ActivePresentation.Slides(j).Shapes(k).Type = msoGroup Then gcount = ActivePresentation.Slides(j).Shapes(k).GroupItems.Count For m = 1 To gcount If ActivePresentation.Slides(j).Shapes(k).GroupItems.Item(m).HasTextFrame Then ActivePresentation.Slides(j).Shapes(k).GroupItems.Item(m) _ .TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS End If Next m End If Next k Next j End Sub
The "msoLanguageIDEnglishUS" which is used in the above macro can be replaced by any desired language. The full list of languages can be found in this article
(Credit goes to Ganesh Kumar who posted the original macro here. I added support for first level of shape grouping. To further improve it the macro can be made recursive to look for groups which contain other groups, etc.)
I improved upon Inigo's answer to provide a recursive version that changes all items to the desired language.
This version will recursively investigate each shape that is a group type. Some experimentation suggests that
msoSmartArt are the group types - feel free to add to that list if you find other types of shapes that can hold text objects.
Sub ChangeProofingLanguageToEnglish() Dim j As Long, k As Long Dim languageID As MsoLanguageID 'Set this to your preferred language languageID = msoLanguageIDEnglishUK For j = 1 To ActivePresentation.Slides.Count For k = 1 To ActivePresentation.Slides(j).Shapes.Count ChangeAllSubShapes ActivePresentation.Slides(j).Shapes(k), _ languageID Next k Next j End Sub Sub ChangeAllSubShapes(targetShape As shape, languageID As MsoLanguageID) Dim i As Long If targetShape.HasTextFrame Then targetShape.TextFrame.TextRange.languageID = languageID End If Select Case targetShape.Type Case msoGroup, msoSmartArt For i = 1 To targetShape.GroupItems.Count ChangeAllSubShapes targetShape.GroupItems.Item(i), languageID Next i End Select End Sub
Based on Inigo, Duncan, Maria and DomDev's answers, this works for shapes, tables, groups, SmartArt, now and in the future:
Sub ChangeProofingLanguageToFrench() Dim j, k As Integer Dim languageID As MsoLanguageID 'Set this to your preferred language languageID = msoLanguageIDFrench 'Loop all the slides in the document, and change the language For j = 1 To ActivePresentation.Slides.Count For k = 1 To ActivePresentation.Slides(j).Shapes.Count ChangeAllSubShapes ActivePresentation.Slides(j).Shapes(k), languageID Next k Next j 'Loop all the master slides, and change the language For j = 1 To ActivePresentation.SlideMaster.CustomLayouts.Count For k = 1 To ActivePresentation.SlideMaster.CustomLayouts(j).Shapes.Count ChangeAllSubShapes ActivePresentation.SlideMaster.CustomLayouts(j).Shapes(k), languageID Next k Next j 'Change the default presentation language, so that all new slides respect the new language ActivePresentation.DefaultLanguageID = languageID End Sub Sub ChangeAllSubShapes(targetShape As Shape, languageID As MsoLanguageID) Dim i As Integer, r As Integer, c As Integer If targetShape.HasTextFrame Then targetShape.TextFrame.TextRange.languageID = languageID End If If targetShape.HasTable Then For r = 1 To targetShape.Table.Rows.Count For c = 1 To targetShape.Table.Columns.Count targetShape.Table.Cell(r, c).Shape.TextFrame.TextRange.languageID = languageID Next Next End If Select Case targetShape.Type Case msoGroup, msoSmartArt For i = 1 To targetShape.GroupItems.Count ChangeAllSubShapes targetShape.GroupItems.Item(i), languageID Next i End Select End Sub
The version of Duncan works well for everything but tables. I found another code which seems to also work with tables: https://stackoverflow.com/questions/4735765/powerpoint-2007-set-language-on-tables-charts-etc-that-contains-text
Public Sub changeLanguage() On Error Resume Next Dim gi As GroupShapes '<-this was added. used below 'lang = "English" lang = "Norwegian" 'Determine language selected If lang = "English" Then lang = msoLanguageIDEnglishUK ElseIf lang = "Norwegian" Then lang = msoLanguageIDNorwegianBokmol End If 'Set default language in application ActivePresentation.DefaultLanguageID = lang 'Set language in each textbox in each slide For Each oSlide In ActivePresentation.Slides Dim oShape As Shape For Each oShape In oSlide.Shapes 'Check first if it is a table If oShape.HasTable Then For r = 1 To oShape.Table.Rows.Count For c = 1 To oShape.Table.Columns.Count oShape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = lang Next Next Else Set gi = oShape.GroupItems 'Check if it is a group of shapes If Not gi Is Nothing Then If oShape.GroupItems.Count > 0 Then For i = 0 To oShape.GroupItems.Count - 1 oShape.GroupItems(i).TextFrame.TextRange.LanguageID = lang Next End If 'it's none of the above, it's just a simple shape, change the language ID Else oShape.TextFrame.TextRange.LanguageID = lang End If End If Next Next End Sub
In addition to answer provided by Mastergalen and to address comments regarding newly type text:
If you will notice, that language will automatically change back whenever you start to type new text (which is very annoying), you have to change current default language for PowerPoint:
- make sure PowerPoint window is an active window
- in the
Windows Taskbar(yes, actually not in PowerPoint), check if
Language baris visible,
- if not go to
Control Panel > Region and Language > Keyboards and Languages. Click
Change keybords..., switch to
Language bartab and check
Docked in the taskbaroption. (this is from Win7, so might be a bit different in other versions).
- if not go to
- now key action - in the
Language barin the taskbar, click language code and switch to EN (if you want currently to use English in PowerPoint). From now on, all new text in PowerPoint will be in the selected language :-)
- if you want write in your original language, just change it back.
I made an add-in back in 2014 for myself which still works fine in PowerPoint 2016. https://github.com/wobba/officeaddin/releases/tag/v1.0.1
It scans for used languages, and allows you to change all at once, looping over.