知识库 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 中,转到 Insert > think-cell > Tools > Deactivate think-cell。
- 按 Alt + F11 打开 Microsoft Visual Basic for Applications。
-
添加此代码作为类模块,并将其命名为
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
-
添加以下代码作为模块:
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 修复此 Bug 之前,您可以采用临时停用 think-cell 的解决方法:
- 在 PowerPoint 中停用 think-cell:Insert > think-cell > Tools > Deactivate think-cell
- 打开损坏的文件并进行修复
- 在 PowerPoint 中重新激活 think-cell:插入 → think-cell → 激活