ppt中,将带有动画的ppt转换成多页pdf的vba代码

本文介绍了VBA宏代码,包含AddElements、IsVisible、AnimationElements和RemElements四个子程序,用于处理PowerPoint中动画的展开、形状可见性判断、动画步数计算以及动态幻灯片的管理和清理。
摘要由CSDN通过智能技术生成
Option Explicit

Sub AddElements()
Dim shp As Shape

Dim i As Integer, n As Integer
n = ActivePresentation.Slides.Count
For i = 1 To n
    Dim s As Slide
    Set s = ActivePresentation.Slides(i)
    s.SlideShowTransition.Hidden = msoTrue
    
    Dim max As Integer: max = AnimationElements(s)
    Dim k As Integer, s2 As Slide
    For k = 1 To max
        Set s2 = s.Duplicate(1)
        s2.Name = "AutoGenerated: " & s2.SlideID
        s2.SlideShowTransition.Hidden = msoFalse
        s2.MoveTo ActivePresentation.Slides.Count
        
        Dim i2 As Integer, h As Shape
        Dim Del As New Collection
        For i2 = s2.Shapes.Count To 1 Step -1
            Set h = s2.Shapes(i2)
            If Not IsVisible(s2, h, k) Then Del.Add h
        Next
        Dim j As Integer
        For j = s.TimeLine.MainSequence.Count To 1 Step -1
            s2.TimeLine.MainSequence.Item(1).Delete
        Next
        For j = Del.Count To 1 Step -1
            Del(j).Delete
            Del.Remove j
        Next
    Next
Next
End Sub

'is the shape on this slide visible at point this time step (1..n)
Function IsVisible(s As Slide, h As Shape, i As Integer) As Boolean

'first search for a start state
Dim e As Effect
IsVisible = True
For Each e In s.TimeLine.MainSequence
    If e.Shape Is h Then
        IsVisible = Not (e.Exit = msoFalse)
        Exit For
    End If
Next

'now run forward animating it
Dim n As Integer: n = 1
For Each e In s.TimeLine.MainSequence
    If e.Timing.TriggerType = msoAnimTriggerOnPageClick Then n = n + 1
    If n > i Then Exit For
    If e.Shape Is h Then IsVisible = (e.Exit = msoFalse)
Next
End Function

'How many animation steps are there
'1 for a slide with no additional elements
Function AnimationElements(s As Slide) As Integer
AnimationElements = 1
Dim e As Effect
For Each e In s.TimeLine.MainSequence
    If e.Timing.TriggerType = msoAnimTriggerOnPageClick Then
        AnimationElements = AnimationElements + 1
    End If
Next
End Function

Sub RemElements()
Dim i As Integer, n As Integer
Dim s As Slide
n = ActivePresentation.Slides.Count
For i = n To 1 Step -1
    Set s = ActivePresentation.Slides(i)
    If s.SlideShowTransition.Hidden = msoTrue Then
        s.SlideShowTransition.Hidden = msoFalse
    ElseIf Left$(s.Name, 13) = "AutoGenerated" Then
        s.Delete
    End If
Next
End Sub

这段PPT宏代码主要由三个子程序(AddElementsIsVisibleAnimationElements)和一个删除生成的幻灯片的子程序(RemElements)组成。下面是它们各自的功能分析:

AddElements 子程序

这个子程序会遍历整个演示文稿的所有幻灯片,并为每一张幻灯片生成多个(根据动画元素的数量)复制的幻灯片,每个复制的幻灯片对应一个动画步骤。然后,它会根据动画步骤的可见性来决定是否删除幻灯片中的某些形状。

  1. 遍历所有幻灯片:通过For i = 1 To n循环,程序会遍历演示文稿中的每一张幻灯片。
  2. 复制幻灯片:对于每一张幻灯片,程序会根据其动画元素的数量(由AnimationElements函数计算)进行复制。每个复制的幻灯片对应原幻灯片中的一个动画步骤。
  3. 设置幻灯片属性:复制的幻灯片会被重命名,并移动到演示文稿的最后。同时,其SlideShowTransition.Hidden属性会被设置为msoFalse,表示在幻灯片演示中这些幻灯片是可见的。
  4. 删除不可见的形状:对于每一个复制的幻灯片,程序会检查其每一个形状在当前动画步骤中是否可见(由IsVisible函数判断)。如果不可见,该形状会被添加到Del集合中,并在后续步骤中被删除。
  5. 删除所有动画:所有复制的幻灯片的动画都会被删除,只保留静态的形状。
  6. 删除不可见的形状:最后,程序会遍历Del集合,并删除其中的所有形状。

IsVisible 函数

这个函数用于判断在给定的动画步骤中,一个形状是否可见。它首先搜索形状的初始状态,然后模拟动画的播放过程,判断形状在指定的动画步骤中是否可见。

AnimationElements 函数

这个函数计算一张幻灯片中有多少个动画步骤。它通过遍历幻灯片的时间线序列,并计算由页面点击触发的动画数量来实现。

RemElements 子程序

这个子程序用于清理由AddElements子程序生成的幻灯片。它会遍历所有的幻灯片,如果幻灯片的名称以"AutoGenerated"开头,那么这张幻灯片就会被删除。同时,它也会将所有隐藏的幻灯片的隐藏属性设置为可见。

总结

总的来说,这段宏代码的主要目的是将PPT中的动画效果“展开”成静态的幻灯片序列,每一个动画步骤都对应一张幻灯片。这样做的好处是可以让那些不支持动画的设备或软件能够正确地显示原本带有动画的PPT内容。同时,通过RemElements子程序,用户可以方便地清理生成的幻灯片,恢复原始的PPT结构。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值