![当 PowerPoint 中的幻灯片发生变化时,如何触发事件?](https://linux22.com/image/1416852/%E5%BD%93%20PowerPoint%20%E4%B8%AD%E7%9A%84%E5%B9%BB%E7%81%AF%E7%89%87%E5%8F%91%E7%94%9F%E5%8F%98%E5%8C%96%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%A7%A6%E5%8F%91%E4%BA%8B%E4%BB%B6%EF%BC%9F.png)
我已经知道两种假定的修复方法,我将在下面列出,以及它们对我不起作用的原因。
第一种是使用SlideShowNextSlide
子程序。这样做的问题是它在转换之前触发事件,因此我无法知道要转换到哪张幻灯片。我希望在演示过程中进入某些幻灯片时触发事件,而不是离开某些幻灯片。我不能简单地将一个添加到字段中,CurrentShowPosition
因为我不一定会前进到下一张幻灯片;我可能会单击超链接。简而言之,我只想在一些从当前幻灯片过渡,但SlideShowNextSlide
我无法知道是否移动到正确的幻灯片来触发事件。
第二种方法是使用OnSlideShowPageChange
子程序。这种方法的问题是,由于我已经保存、关闭并重新打开了 PowerPoint 幻灯片一次,因此 PowerPoint 会直接忽略子程序中的代码。
有人对我能做什么有什么建议吗?也许有办法解决上述问题之一?我在 Windows 8.1 上使用 PowerPoint 2013。
这是我想要使用的代码:
Private Sub EventHandler_SlideShowNextSlide(ByVal SSW As SlideShowWindow)
' The purpose here is to stop music playing in the background, which happens on certain slides.
' For my purposes, it's not enough to simply state how many slides to play the music over,
' because some slides that need the music stopped can occur before slides that need it playing.
Dim Change As Boolean
If SSW.View.CurrentShowPosition < 66 And ((SSW.View.CurrentShowPosition < 42 And SSW.View.CurrentShowPosition > 25) Or SSW.View.CurrentShowPosition Mod 2 = 0) _
Then
ActivePresentation.Slides(1).Shapes("music file.mp3").Delete
Change = True
End If
If Change Then Application.CommandBars.ExecuteMso "Undo"
End Sub
答案1
Dim CS As Slide
Set CS = ActivePresentation.SlideShowWindow.View.Slide
If CS.SlideIndex < 66 And CS.SlideIndex > 25 Then
'''
End If
我尝试验证我是否在所需的幻灯片中SlideIndex
,然后运行If Condition