KB0209:PowerPoint 2013以降でPowerPointファイルを修復できない

問題

PowerPointは破損したPowerPointファイルを修復できません。

説明

PowerPointによる修復前にプログラム コードを使用してスライドにアクセスすると、PowerPointファイルを修復できません。ただし、think-cellと他のほとんどのアドインは、ファイルを開いた際にスライドにアクセスする必要があります。ファイルの破損をアドインが把握することはできません。

この件については Microsoft に報告していますが、今のところ Microsoft はこの問題を解決することを決定していません。 貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号115040112590053を使用してください。このエラーは think-cell なしでも再現できます。 もっと読む

think-cellを使用しないで再現

修復が終了する前に何らかのコードで破損したスライドにアクセスすると、think-cellなしでもエラーが再現されます。以下の再現で、PresentationOpenイベント ハンドラーは、ファイルが開いた際(すなわち修復前)、あらゆるスライドにアクセスするコードを読み出します。

  1. 新しい空のファイルでPowerPoint 2013以降を開きます。
  2. PowerPointで Insert > think-cell > Tools Tools Menu icon > Deactivate 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) & vbCr
    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を押し、[Macro] ウィンドウを開きます。
  7. Initialize_EventhandlerマクロをRunします。
  8. 破損したPowerPointファイルを開き、修復を試みます。

解決策

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

  1. PowerPointでthink-cellを非アクティブ化します。Insert > think-cell > Tools Tools Menu icon > Deactivate think-cell
  2. 破損したファイルを開き、修復します。
  3. PowerPointでthink-cellを再びアクティブにします:[Insert] > [think-cell] > [Activate]