如何在 VBA 或使用 CTRL+C 复制幻灯片时阻止 PowerPoint 2013 崩溃

How to stop PowerPoint 2013 crash when copying slides either in VBA or with CTRL+C

所以我有一个相当复杂的 PowerPoint 演示文稿,我一直在研究它——它是一个复杂的培训程序,结合了测试部分,提出多项选择题,其中一些只是文本,一些是图形,一些其中有动画图形,有的是合成的语音和音频等。当用户答错幻灯片时,VBA代码将幻灯片复制到演示文稿的末尾,以便用户必须重新回答错过的问题以确保学习正确的反应。

无论如何,我添加了大约 200 张幻灯片,然后我 运行 遇到了问题。 运行 某张幻灯片后,复制该幻灯片的 VBA 代码开始导致简单代码行 "invalid function" 的错误:oSld.Copy。然后我尝试在幻灯片编辑 window 中使用 CTRL+C 手动复制幻灯片,我得到了类似的错误,但措辞不同;像这样:"We're sorry, something went wrong that might make PowerPoint unstable. Please save your presentation and restart PowerPoint."

我对这种奇怪的行为感到非常困惑,并且认为 PowerPoint 可能对幻灯片的数量犹豫不决,所以,我将幻灯片的数量减少到只有 15 张左右,但是,同一张幻灯片仍然在 oSld.Copy 和 CTRL+C.

我花了几个小时试图缩小错误发生的范围,它似乎在最长的时间内一直与这张幻灯片相关联。但是后来,我碰巧在另一张幻灯片上遇到了同样的错误。共同点是他们在幻灯片上都有不同寻常的动画。具体来说,在两张幻灯片上,我都有一组形状,并且使用 "Lines" 动画将这组形状从一个点移动到另一个点。

当我从这些幻灯片中删除动画时,oSld.Copy 和使用 CTRL+C 时都不再出现错误。

我的解决方法(到目前为止有效)是在将源幻灯片复制到演示文稿末尾后添加代码以从源幻灯片中删除动画。幸运的是,复制错误似乎只发生在尝试复制带有复杂动画的第二张幻灯片时,而不是在复制带有复杂动画的第一张幻灯片之后。因此,通过在复制幻灯片后删除复杂动画,在演示文稿结束时将动画正确复制到幻灯片,但显然从源幻灯片中删除动画可以防止在复制下一张复杂动画幻灯片时出现问题。

我修改了 PowerPoint Alchemy 的 John Wilson 的代码来删除动画如下:

Sub DeleteAnimations()
    Dim i As Integer
    Dim t As Integer
    Dim osld As Slide

    'delete anims from just the current slide
    Set osld = ActivePresentation.Slides(ActivePresentation.SlideShowWindow.View.CurrentShowPosition)

    'Remove normal animations
    For i = osld.TimeLine.MainSequence.Count To 1 Step -1
        osld.TimeLine.MainSequence(i).Delete
    Next i

    'Remove triggers
    For i = osld.TimeLine.InteractiveSequences.Count To 1 Step -1
        For t = osld.TimeLine.InteractiveSequences(i).Count To 1 Step -1
            osld.TimeLine.InteractiveSequences(i).Item(t).Delete
        Next t
    Next i
End Sub

我费尽心机试图消除这个错误,因为我花了很长时间才弄明白,我希望在这里发布这些信息会对其他人有所帮助。