KB0209:我无法使用 PowerPoint 2013 或更高版本修复 PowerPoint 文件
问题
PowerPoint 无法修复损坏的 PowerPoint 文件。
说明
如果在 PowerPoint 修复幻灯片之前以编程方式访问幻灯片,修复 PowerPoint 文件就会失败。然而,thinkcell 以及很可能其他加载项都必须在文件打开时访问幻灯片,而加载项无法知道文件是否已损坏。
我们已向 Microsoft 提交案例,但到目前为止 Microsoft 尚未决定修复此问题。若贵公司有 Microsoft Office 支持合同,而且您希望联系 Microsoft 请求修复,可以参阅 Microsoft 案例编号 115040112590053。 即使不使用 thinkcell,也可以重现该错误。 阅读更多
不使用 thinkcell 进行复现
如果任何代码在修复完成前访问损坏的幻灯片,即使不使用 thinkcell,也可以重现该错误。在以下复现步骤中,PresentationOpen 事件处理程序会在文件打开时调用代码访问所有幻灯片,也就是在修复之前访问。
- 使用新的空文件打开 PowerPoint 2013 或更高版本。
- 在 PowerPoint 中,转到 Insert > thinkcell > Tools
> Deactivate thinkcell。
- 按 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 修复此错误之前,您可以暂时停用 thinkcell 作为解决方法:
- 在 PowerPoint 中停用 thinkcell:Insert > thinkcell > Tools
> Deactivate thinkcell
- 打开损坏的文件并进行修复
- 在 PowerPoint 中重新激活 thinkcell:Insert > thinkcell > Activate