ナレッジベース KB0209
PowerPoint 2013&2016でPowerPointファイルを修復できない
問題
PowerPointは破損したPowerPointファイルを修復できません。
説明
PowerPointによる修復前にプログラム コードを使用してスライドにアクセスすると、PowerPointファイルを修復できません。ただし、think-cellと他のほとんどのアドインは、ファイルを開いた際にスライドにアクセスする必要があります。ファイルの破損をアドインが把握することはできません。
この件については Microsoft に報告していますが、今のところ Microsoft はこの問題を解決することを決定していません。 貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号115040112590053を使用してください。このエラーは think-cell なしでも再現できます。
think-cellを使用しないで再現
修復が終了する前に何らかのコードで破損したスライドにアクセスすると、think-cellなしでもエラーが再現されます。以下の再現で、PresentationOpenイベント ハンドラーは、ファイルが開いた際(すなわち修復前)、あらゆるスライドにアクセスするコードを読み出します。
- 新しい空のファイルでPowerPoint 2013または2016を開きます。
- PowerPointでInsert > think-cell > Tools > Deactivate think-cellにアクセスします。
- Alt + F11を押して、Microsoft Visual Basic for Applicationsを開きます。
-
このコードを Class Module として追加し、名前を付けます。
cEventClass
Public WithEvents PPTEvent As Application Private Sub Class_Initialize() MsgBox "EventHandler is now active." End Sub Private Sub PPTEvent_PresentationOpen(ByVal pres As Presentation) On Error GoTo errHandle: Debug.Print "open file: " & pres.Name Dim i As Integer For i = 1 To pres.Slides.Count Debug.Print "Slide " & pres.Slides.Item(i).SlideNumber; " / " _ & pres.Slides.Count Next i Exit Sub errHandle: Debug.Print ("VBA Error: " & Err.Number & " " & Err.Description) & vbCr End Sub
-
以下のコードをModuleとして追加します。
Dim cPPTObject As New cEventClass Sub Initialize_Eventhandler() Set cPPTObject.PPTEvent = Application Debug.Print "**** EventHandler active ****" End Sub
- PowerPointプレゼンテーション ウィンドウでAlt + F8を押し、[マクロ] ウィンドウを開きます。
- Initialize_Eventhandlerマクロを実行します。
- 破損したPowerPointファイルを開き、修復を試みます。
この問題はMicrosoft Office 2010では発生しません。
解決策
Microsoftがこのバグを修正するまで、回避策として一時的にthink-cellを非アクティブ化できます。
- PowerPointでthink-cellを非アクティブ化します。Insert > think-cell > Tools > Deactivate think-cell
- 破損したファイルを開き、修復します。
- PowerPointでthink-cellを再びアクティブにしてください:[挿入]→[think-cell]→[アクティブ化]