KB0209:我无法使用 PowerPoint 2013 或更高版本修复我的 PowerPoint 文件
问题
PowerPoint 无法修复损坏的 PowerPoint 文件。
说明
若在 PowerPoint 修复文件之前以编程方式访问幻灯片,则修复 PowerPoint 文件将失败。但是,打开文件时,think-cell(很有可能还有其他加载项)必须访问幻灯片,加载项无法得知文件已损坏。
我们已经向 Microsoft 报告,但是 Microsoft 迄今为止尚未决定要修复该问题。若贵公司有 Microsoft Office 支持合同,而且您希望联系 Microsoft 请求修复,可以参阅 Microsoft 案例编号 115040112590053。该错误在不使用 think-cell 的情况下也会重现。 阅读更多
在不使用 think-cell 的情况下重现
若有代码在修复完成之前访问损坏的幻灯片,则在不使用 think-cell 的情况下也可以重现该错误。在以下的重现过程中,事件处理程序 PresentationOpen 会调用代码在文件打开时(即修复之前)访问所有幻灯片。
- 使用新的空文件打开 PowerPoint 2013 或更高版本。
- 在 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 打开 Macro 窗口
- Run 该 Initialize_Eventhandler 宏。
- 现在,打开损坏的 PowerPoint 文件,然后尝试对其进行修复。
解决方案
在 Microsoft 修复此 Bug 之前,您可以采用临时停用 think-cell 的解决方法:
- 在 PowerPoint 中停用 think-cell:Insert > think-cell > Tools
> Deactivate think-cell
- 打开损坏的文件并进行修复
- 在 PowerPoint 中重新激活 think-cell:Insert > think-cell > Activate