如何自动隐藏 PowerPoint 幻灯片?

问题描述 投票:0回答:2

我在讲座中使用 PowerPoint 并为学生打印一部分幻灯片(以便他们在我展示答案之前填空)。目前,我在幻灯片的左下角放置了一个浅蓝色圆圈,我想在打印时隐藏该圆圈(但不在演讲时隐藏)。然后,我在打印幻灯片时手动隐藏幻灯片,然后在演讲之前取消隐藏所有幻灯片。有什么办法可以自动化这个过程吗?我在 PC 和 Mac 上都使用 Office 365。

vba office365 powerpoint
2个回答
1
投票

这将帮助您开始,将其另存为 pptm,然后将副本另存为插件:

ChangeAnswersSlideState
- 将活动幻灯片更改为答案幻灯片
PrintStudentHandout
- 隐藏答案幻灯片,然后打印,然后取消隐藏

Option Explicit

Private Const ANS_ID As String = "ANS"

Sub PrintStudentHandout()
    ChangeAnswersSlideVisible
    With ActivePresentation
        .PrintOptions.ActivePrinter = "Microsoft XPS Document Writer"
        .PrintOut
    End With
    ChangeAnswersSlideVisible msoFalse
End Sub

Private Sub ChangeAnswersSlideVisible(Optional Hide As MsoTriState = msoTrue)
    Dim oSlide As Slide, oShp As Shape
    For Each oSlide In ActivePresentation.Slides
        For Each oShp In oSlide.Shapes
            If IsAnswersShape(oShp) Then
                oSlide.SlideShowTransition.Hidden = Hide
                Exit For
            End If
        Next oShp
    Next oSlide
End Sub

Sub ChangeAnswersSlideState()
    Dim oShp As Shape, bChanged As Boolean
    bChanged = False
    For Each oShp In Application.ActiveWindow.View.Slide.Shapes
        If IsAnswersShape(oShp) Then
            oShp.Delete
            bChanged = True
        End If
    Next oShp
    If Not bChanged Then MakeAnswersSlide
End Sub

Private Sub MakeAnswersSlide(Optional ByRef AnswerSlide As Slide = Nothing)
    If AnswerSlide Is Nothing Then Set AnswerSlide = Application.ActiveWindow.View.Slide
    With AnswerSlide.Shapes.AddShape(msoShapeOval, -80, 460, 72, 72)
        .TextFrame.TextRange.Text = ANS_ID
    End With
End Sub

Private Function IsAnswersShape(ByRef CheckShape As Shape) As Boolean
    Dim bIsAnAnswerShape As Boolean
    bIsAnAnswerShape = False
    With CheckShape
        If .AutoShapeType = msoShapeOval Then
            If .HasTextFrame Then
                If .TextFrame.TextRange.Text = ANS_ID Then
                    bIsAnAnswerShape = True
                End If
            End If
        End If
    End With
    IsAnswersShape = bIsAnAnswerShape
End Function

0
投票

在我看来,接受的答案有点过于复杂。最终,对于给定的幻灯片对象

oSlide

'To hide a slide
oSlide.SlideShowTransition.Hidden = True

'To show a slide
oSlide.SlideShowTransition.Hidden = false
© www.soinside.com 2019 - 2024. All rights reserved.