Changing the language of a whole presentation in MS PowerPoint can be tedious. Especially when you translate your slides. You easily end up with a mix of languages on a number of slides. You notice, then, that it is not possible to select the main one: the language button (on the bottom bar) is simply not clickable if a multilanguage text is selected (in MS Word, this works, but not in MS PowerPoint). Even a mix between English/US and English/UK disables the button.
In Windows 10 and PowerPoint 2016, after 7 years since the first publication of this blog entry, the problem remains unsolved by Microsoft and the following solutions still apply.
On macOS, for PowerPoint prior to v 16, only the basic workaround and the outline solution will work for you.
Basic workaround
The basic roundabout consists in determining the “by default” language. Simply click the language on the language bar on some one-language slide where this actually works, select a language, and press “by default”:
Every new slide will systematically apply your default language to any new box.
However, this doesn’t solve the problem of an existing presentation you wish to translate. Starting to write in English on a French slide, the auto-corrector will underline your spelling, perhaps even change it if you have ‘correct as you type’ active. To stop this, you need to determine the language of a whole slide. Or even better, the language of a whole presentation. But how?
The “outline” solution
One of the solutions, kindly transmitted to me by mail by a “Maps and Spaces” visitor named Mike, consists in workinng in “outline” mode (instead of the default “slides” mode showing slide thumbnails). In the outline pane, select everything by clicking Ctr+A, then, in the Review ribbon, select “Language”, and select the desired language for all the selected text.
With Visual Basic: change also the language of the notes
The outline solution only changes the language of the slides, leaving the notes (your presentation comments) untouched. To achieve also this result, use this macro, provided on Chocotooth’s blog:
Sub SetLangUS()
Dim scount, j, k, fcount
scount = ActivePresentation.Slides.Count
For j = 1 To scount
fcount = ActivePresentation.Slides(j).Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k).TextFrame _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
fcount = ActivePresentation.Slides(j).NotesPage.Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).NotesPage.Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).NotesPage.Shapes(k).TextFrame _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
Next j
End Sub
Code language: VBScript (vbscript)
What should you do with this? Click the Visual Basic button on the ‘Developer’ tab:
Insert a new module by right-clicking on ‘VBAProject’ in the left navigation pane:
This opens a new window. Paste the code into it. And run it with the ‘play’ button:
All text boxes have been set to English/US. You can save this code for later use in a file with .bas extension.
Other languages
The script above works also for any other language. You can change the whole presentation to French, to German or to any other language taken into account by Microsoft spelling. In these cases, you should change LanguageID on line 9 and 16 as follows :
.TextRange.LanguageID = msoLanguageIDFrench
or:
.TextRange.LanguageID = msoLanguageIDGerman
or:
.TextRange.LanguageID = msoLanguageIDSpanish
etc.
The full list of available language ID’s is available here:
http://msdn.microsoft.com/en-us/library/microsoft.office.core.msolanguageid.aspx
But I am on macOS!
If you are on macOS, only the basic workaround and the outline solution will work for you, unless you are using PowerPoint more recent than version 16.9. In earlier versions, Microsoft just thought interesting not to include the LanguageID property to the TextFrame object, which basically breaks the code. On >16.9, though, the following code should work (TextFrame is replaced by TextFrame2 , as suggested here by John SR Wilson):
Sub SetLangUS()
Dim scount, j, k, fcount
scount = ActivePresentation.Slides.Count
For j = 1 To scount
fcount = ActivePresentation.Slides(j).Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k).TextFrame2 _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
fcount = ActivePresentation.Slides(j).NotesPage.Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).NotesPage.Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).NotesPage.Shapes(k).TextFrame2 _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
Next j
End Sub
Code language: VBScript (vbscript)
Very helpful. I adapted it for French Canadian. However, it does not change the language of the boxes (SmartArt and others) within the slides.
@Chris You saved my life.
After two hours of trial and error your method was the only one that worked. Thanks!
@Chris, thanks for the great improvement (boxes, smart art etc.)!
The “outline” solution works fine for me on PPT 2010 French. Thanks a lot. Nicolas
@CJM : This script applies to already language-detected power-point files, i.e. when you want to edit, for instance, a file with slide-content declared in German but translate it in English. It is also specific to the Windows version of PowerPoint. Keyboard settings are an issue when producing a PowerPoint file from scratch.
In my case all of this was not helpful. I use ppt with a German keyboard and found that the proofing language within a text box seems to be mysteriously linked to the keyboard setting. When I changed that to English the proofing of an English text would work nicely, with the German setting I was back to the error display. However, with the keyboard itself having German key symbols, I found it difficult to memorize where e.g. the question mark is in the English layout. Eventually I found the easiest solution in ppt is to go to File\Options\Proofing and uncheck the box “detect language automatically”. Haven’t had problems ever since.
magic :)
This doesn’t catch text in boxes, smart art etc. An improved version:
Attribute VB_Name = “Module1”
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
‘change all text:
If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k) _
.TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
‘change all text in boxes, smart art etc.
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
‘change all text in speaker notes
fcount = ActivePresentation.Slides(j).NotesPage.Shapes.Count
For k = 1 To fcount
If ActivePresentation.Slides(j).NotesPage.Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).NotesPage.Shapes(k).TextFrame _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
Next j
End Sub