268

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.

Franck Dernoncourt
  • 24,246
  • 64
  • 231
  • 400
liamzebedee
  • 3,317
  • 2
  • 20
  • 17

9 Answers9

274

To change the language of the entire PowerPoint easily, open the View tab and select the Outline view.

Now press

  • Ctrl+A to select all.
  • ToolsLanguage → 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.

PowerPoint 2013

  • ViewOutline → select all slides (in a left menu) via Ctrl+A.
  • ReviewLanguageSet Proofing Language... → Choose your language to set.

As for me - PowerPoint restart was needed. Probably because I also did changed Editing Language:

  • ReviewLanguageSet Proofing Language...Language PreferencesChoose Editing Languages.
qubodup
  • 9,394
Mastergalen
  • 3,014
39

Using Powerpoint 2010 I opened the Outline menu -

outline tab

Selected all text (Ctrl+A), opened the language menu and set my proofing language

language option

And it worked!

The language menu is located on the Review ribbon tab (after the Slide Show tab and not visible on the screenshot).

random
  • 15,201
liamzebedee
  • 3,317
  • 2
  • 20
  • 17
35

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 msoGroup and 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
30

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

Inigo
  • 401
19

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
tricasse
  • 681
  • 4
  • 9
10

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 bar is visible,
    • if not go to Control Panel > Region and Language > Keyboards and Languages. Click Change keybords..., switch to Language bar tab and check Docked in the taskbar option. (this is from Win7, so might be a bit different in other versions).
  • now key action - in the Language bar in 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.
Gas
  • 221
8

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 &gt; 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

Hebo
  • 103
  • 4
Maria
  • 81
7

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.

enter image description here

0

If other methods don't help, unexpected changes of the language may also be caused by the language setting in the slide master.

In order to change it, go to View > Slide Master, select the parent-most master slide, select all elements, and change the language as described in the accepted answer. The change should propagate to all layouts, though placeholder text will remain in the original language.

If possible, the clean solution is to use a template configured with the correct language. However, depending on company-mandated templates / the office installation, or simply when trying to fix an existing file, this might not be possible.

kdb
  • 2,451