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”:

MS PowerPoint - Language 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.

Setting language in PowerPoint 2

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 SubCode 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:

New module in Visual Basic

This opens a new window. Paste the code into it. And run it with the ‘play’ button:

Code Window in Visual Basic

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!

macOS powerpoint visual basic

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 SubCode language: VBScript (vbscript)

Join the Conversation

8 Comments

Your email address will not be published. Required fields are marked *

  1. Very helpful. I adapted it for French Canadian. However, it does not change the language of the boxes (SmartArt and others) within the slides.

  2. @Chris You saved my life.
    After two hours of trial and error your method was the only one that worked. Thanks!

  3. The “outline” solution works fine for me on PPT 2010 French. Thanks a lot. Nicolas

  4. @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.

  5. 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.

  6. 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