通过 powerpoint 取得进展,宏在第二张幻灯片上不起作用

progress through powerpoint with macros not working on second slide

我正在尝试创建一个宏,它将 运行 通过 powerpoint 演示文稿中的幻灯片。我让它工作,但现在它停止工作了,我不知道为什么。

通过幻灯片和动画运行的vbscript是

Private Sub PPTEvent_SlideShowNextBuild(ByVal Wn As SlideShowWindow)
    Sleep 1000
    SendKeys "{RIGHT}"
End Sub


Private Sub PPTEvent_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
    Sleep 1000   
    SendKeys "{RIGHT}"
End Sub

有没有更好的方法来完成这个?我看不出问题出在哪里,我也尝试过删除 Sleep 1000,但没有成功。

奇怪的是,如果我同时使用两者

SendKeys "{ENTER}"
SendKeys "{RIGHT}"

如我所愿,它 运行 贯穿整个幻灯片。

一般情况下,应避免使用 SendKeys。为什么不试试

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub GoThroughSlides()
    Dim sl As PowerPoint.Slide
    ActivePresentation.SlideShowSettings.Run
    For Each sl In ActivePresentation.Slides
        Sleep 3000 '
        ActivePresentation.SlideShowWindow.Activate
        SlideShowWindows(1).View.GotoSlide sl.SlideNumber
    Next sl
End Sub

这是另一种基于 SlideShowSettings

帮助的方法

我在下面更正了 MSDN 页面中的一个错误(对于 LoopUntilStopped 需要使用 msoTrue/False 而不是 True/False)。

当您进入幻灯片模式和动画时它会自动启动 运行 好的。

在标准模块中...

Public showRunning As Boolean

Sub runSlides()

  showRunning = True
  For Each s In ActivePresentation.Slides
    With s.SlideShowTransition
      .AdvanceOnTime = msoTrue
      .AdvanceTime = 1
    End With
  Next

  With ActivePresentation.SlideShowSettings

    .RangeType = ppShowAll
    .AdvanceMode = ppSlideShowUseSlideTimings
    .LoopUntilStopped = msoFalse
    .ShowWithAnimation = msoTrue
    .Run

  End With

End Sub

Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)

  If Not showRunning Then
    runSlides
  End If

End Sub

Public Sub OnSlideShowTerminate(ByVal Wn As SlideShowWindow)
  showRunning = False
  closeSlideShow
End Sub

Public Sub closeSlideShow()
Dim s As Slide

  For Each s In ActivePresentation.Slides
    With s.SlideShowTransition
      .AdvanceOnTime = msoFalse
    End With
  Next

  On Error Resume Next
  ActivePresentation.SlideShowWindow.View.Exit
  On Error GoTo 0

End Sub

编辑:

添加了 closeSlideShow 例程以停止幻灯片放映每次 运行ning。

注意:以编程方式将 .AdvanceOnTime 设置为 msoFalse 或手动取消选中“幻灯片放映”功能区选项卡中的“使用计时”,将从 运行 开始停止幻灯片放映。似乎将其设置为 msoTrue,输入时将其设置为 msoFalse,并尝试在同一例程中执行 ActivePresentation.SlideShowSettings.Run 将不起作用!