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

問題

PowerPoint が破損した PowerPoint ファイルの修復に失敗します。

説明

PowerPoint がスライドを修復する前にプログラムからスライドにアクセスすると、PowerPoint ファイルの修復は失敗します。しかし、thinkcell やおそらく他のアドインも、ファイルを開いたときにスライドへアクセスする必要があり、アドイン側でファイルが破損していることを知る方法はありません。

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

thinkcell を使用しない再現手順

修復が完了する前に何らかのコードが破損したスライドにアクセスすると、このエラーは thinkcell なしでも再現できます。以下の再現手順では、ファイルを開いたとき、つまり修復前に、PresentationOpen イベント ハンドラーがすべてのスライドにアクセスするコードを呼び出します。

  1. PowerPoint 2013 以降を新しい空のファイルで開きます。
  2. PowerPoint で、Insert > thinkcell > Tools Tools Menu icon > Deactivate thinkcell に移動します。
  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 がこのバグを修正するまでの一時的な回避策として、thinkcell を無効化できます。

  1. PowerPoint で thinkcell を無効化します: Insert > thinkcell > Tools Tools Menu icon > Deactivate thinkcell
  2. 破損したファイルを開いて修復します
  3. PowerPoint で thinkcell を再度有効化します: Insert > thinkcell > Activate