仕事でハマったのでメモです。
バージョンは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)だけにしてみましたが、うまく動作せず。
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かをしらべて適宜変更してください。
参考にしたサイトは以下になります
コメント