PowerPointのスペルチェック、文章校正/スペルチェックの仕様が地獄で、アメリカ英語とイギリス英語が混在してしまう

雑記
雑記

仕事でハマったのでメモです。

バージョンはOffice 2016です。

Office (PowerPoint, Word) のスペルチェックが正しく動作しない

英語の資料をPowerPointとWordで作っていたのですが、提供先からイギリス英語(British English)とアメリカ英語(American English)が混在しているから、アメリカ英語で統一してくれとの指摘を受けてしまいました。

提供前にPowerPointとWordのスペルチェックをかけてつづりを統一していたのですが、なぜかある部分ではイギリス英語が残っており、再度、アメリカ英語でスペルチェックをかけてみてもチェックされません。

同じスライドの中でもチェックされるものとされないものが、、、、

よくよく見てみると、それぞれの図形を選択して、画面左下の表記を見てみると、以下のような感じです。

PowerPointの図形(シェイプオブジェクト)の設定が、English (United States)のものと、English (Australia)のものが混在している。。。。。

原因

いろいろしらべた結果、原因としては、私のPowerPointのデフォルトの編集言語(Editing Languages)は「English (United States)」なのですが、どうやら一緒に同じファイルを編集したオーストラリア人の同僚の設定は「English (Australia)」であったため、彼らが追加した図形はすべてEnglish (Australia)のものになってしまっているようです

英語版の画面キャプチャ 日本語版は、[校閲​​] タブ > [言語​​] > [言語の設定]

対処

校正言語を変更する(うまくいかず)

当初、スペルチェックのために使用する校正言語を指定すればうまくいくのかと思い、[校閲​​] タブで、[言語​​] > [校正言語の設定]でEnglish (United States)だけにしてみましたが、うまく動作せず

上記の設定から、「English (Australia)」を削除してもダメ

Ctrl + A で全選択して変更する

インターネットで何時間もかけてわかった対処方法としては、Ctrl + A で全選択して変更するという技。これはWordであれば一回の操作で全ページ選択可能なので良いのですが、PowerPointの場合、スライドそれぞれやらなければならないので、スライドの数が多いと地獄です。

結局マクロを実行(PowerPoint)

PowerPointは結局、インターネットのサイトを参考に、以下のマクロを実行して、すべてのオブジェクトの言語設定を変更しました。(実行前にかならずバックアップをとって、マクロの実行は自己責任でお願いします)

Sub ChangeLangOfAllText_caller()
    '変更したい言語によって以下のmsoLanguageIDEnglishUSの部分を変更
    ChangeLangOfAllText (msoLanguageIDEnglishUS)
End Sub

Private Function ChangeLangOfAllText(ByVal LangID As Long)
    Dim MySlide As Slide
    Dim MyShape As Shape
    Dim MyD As Design
    Dim MyHeaderFooter As HeaderFooter
    Dim i, nbs As Integer
    ''''' First deal with the master slides
    For Each MyD In ActivePresentation.Designs
        For Each MyShape In MyD.SlideMaster.Shapes
            ProcessShapes MyShape, LangID
        Next MyShape
    Next MyD
    ''''' Now deal with the slides
    ' Enable this for debugging
    'Debug.Print "File " & ActivePresentation.Name & _
      ": working with " & ActivePresentation.Slides.Count & " slides"
    For Each MySlide In ActivePresentation.Slides
        ' Enable this for debugging
        'Debug.Print " Slide index " & MySlide.SlideIndex & ", Slide number " & MySlide.SlideNumber & _
          ": working with " & MySlide.Shapes.Count & " shapes"
        For Each MyShape In MySlide.Shapes
            ProcessShapes MyShape, LangID
        Next MyShape
        ''''' Now deal with the Notes
        For Each MyShape In MySlide.NotesPage.Shapes
            ProcessShapes MyShape, LangID
        Next MyShape
        ''''' Now deal with the master ' doesn't appear to work, have to try something else
        For Each MyShape In MySlide.Master.Shapes
            ProcessShapes MyShape, LangID
        Next MyShape
    Next MySlide
End Function

Private Function ProcessShapes(MyShape As Shape, ByVal LangID As Long)
    Dim i As Integer
    If ((MyShape.Type = msoGroup) Or (MyShape.Type = msoTable)) Then
        On Error Resume Next
        For i = 1 To MyShape.GroupItems.Count
            ''' The trick is to recurse!
            ProcessShapes MyShape.GroupItems.Item(i), LangID
        Next i
    Else
        ChangeLang MyShape, LangID
    End If
End Function

Private Function ChangeLang(MyShape As Shape, ByVal LangID As Long)
    Dim i As Integer
    If (MyShape.HasTextFrame) Then
        ' Enable this for debugging
        'Debug.Print " Shape " & MyShape.ZOrderPosition & ", type: " & MyShape.Type & _
          ", has text frame: " & MyShape.HasTextFrame & ", has text: " & MyShape.TextFrame.HasText & _
          ", alt. text: " & MyShape.AlternativeText
        MyShape.TextFrame.TextRange.LanguageID = LangID
    End If
End Function

これで無事、全てのスライドの言語設定が統一されました。

変更先の言語、上のコードでは、msoLanguageIDEnglishUS となっている部分は、以下のサイトをみて、どの言語がどのNameかをしらべて適宜変更してください。

MsoLanguageID enumeration (Office)

参考にしたサイトは以下になります

Change the spell-checking language on a PowerPoint presentation
I received a PowerPoint presentation with dozens of slides, each of them with a number of text boxes. Although the presentation is written in English, the langu...
ひげきちのブログ

コメント