ナレッジ ベース 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イベント ハンドラーは、ファイルが開いた際(すなわち修復前)、あらゆるスライドにアクセスするコードを読み出します。

  1. 新しい空のファイルでPowerPoint 2013または2016を開きます。
  2. PowerPointで、[挿入] → [think-cell] → [その他] その他のメニュー→ [think-cellの非アクティブ化] を選択します。
  3. Alt + F11を押して、Microsoft Visual Basic for Applicationsを開きます。
  4. 以下のコードを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) & vbCrLf
    End Sub
  5. 以下のコードをModuleとして追加します。

    Dim cPPTObject As New cEventClass
    
    Sub Initialize_Eventhandler()
        Set cPPTObject.PPTEvent = Application
        Debug.Print "**** EventHandler active ****"
    End Sub
  6. PowerPointプレゼンテーション ウィンドウでAlt + F8を押し、[マクロ] ウィンドウを開きます。
  7. Initialize_Eventhandlerマクロを実行します。
  8. 破損したPowerPointファイルを開き、修復を試みます。

この問題はMicrosoft Office 2010では発生しません。

解決策

Microsoftがこのバグを修正するまで、回避策として一時的にthink-cellを非アクティブ化できます。

  1. PowerPointでthink-cellを非アクティブ化します:[ [挿入] → [think-cell] → [その他] その他のメニュー→ [think-cellの非アクティブ化]
  2. 破損したファイルを開き、修復します。
  3. PowerPointでthink-cellを再びアクティブにしてください:[ [挿入] → [think-cell] → [アクティブ化]