ナレッジベース 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 で、[挿入] → [think-cell] → [Tool] (ツール)
- 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を非アクティブ化します:PowerPoint で、[挿入] → [think-cell] → [Tool] (ツール)
- 破損したファイルを開き、修復します。
- PowerPointでthink-cellを再びアクティブにしてください:[挿入] → [think-cell] → [アクティブ化]