通过 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 将不起作用!
我正在尝试创建一个宏,它将 运行 通过 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 将不起作用!