Hello,大家好,有部份VBA技術愛好者可能在PPT中用過幻燈片的放映和結束放映兩種狀态的VBA觸發事件:一來是幻燈片放映時觸發某種行為,二來是終止放映時又觸發另外的某種行為。這些都是PPT放映過程中起到很好的特效作用。而如果加進了帶延時的Do While循環,如果想結束放映時強制退出這個循環,可不是件容易的事,為什麼說呢?大家如果親自去實踐一下,自然就有所體會。那麼,能否實現解決這個棘手的問題呢?我仔細潛心研究了幾天,總算弄了大概眉目出來了,還是願意跟大家分享一下,也算抛磚引玉吧,如果各位有更好的解決方案方法也請不吝評論回複哦,在此先謝謝了!
好了,不廢話了,我們先還是來一下我們說的技術的知識儲備吧。
一、知識儲備
(一)PPT放映時應該觸發的事件過程
Sub OnSlideShowPageChange()
事件代碼
…
End Sub
(二)PPT終止放映時應該觸發的事件過程
Sub OnSlideShowTerminate()
事件代碼
…
End Sub
(三)PPT中的延時過程定義
Sub delay(t As Single)
Dim t1 As Single
t1=Timer
Do
DoEvents'轉讓控制權,讓操作系統執行其他事情
Loop While Timer-t1<t
End Sub
(四)PPT放映狀态屬性捕獲
SlidesShowWindows(1).View.State
如果為1則表示處于放映狀态,為5則表示終止放映狀态
二、以一個指針旋轉作為案例處理過程
(一)在空白幻燈片上繪制一個指針和一個小圓,并通過聯結構成一個真正的指針。
圖1 繪制旋轉的指針
(二)VBA環境下插入一個模塊,并輸入如下代碼
Public shp As Shape, exit_flag As Boolean
Sub OnSlideShowPageChange()
exit_flag = False
Rotate_shape
End Sub
Sub OnSlideShowTerminate()
exit_flag = True
MsgBox "Good bye,see you next time!"
End Sub
Sub Rotate_shape()
Set shp = ActivePresentation.Slides(1).Shapes(1)
Do While exit_flag = False
If SlideShowWindows(1).View.State = 5 Then
shp.Rotation = 0
Exit Do
Else
delay 0.1
shp_offset = Second(Now) * 6
shp.Rotation = shp_offset
End If
Loop
End Sub
Sub delay(t As Single)
Dim t1 As Single
t1 = Timer
Do
DoEvents
Loop While Timer - t1 < t
End Sub
并為這些代碼加必要的注釋,如下截圖所示
圖2 注釋截圖
(三)運行效果界面截圖
1、幻燈片放映時自動啟動指針以秒的時間角度不斷旋轉
圖3 放映時指針旋轉
2、終止幻燈片放映時轉動的動指針歸位的情況
圖4 結束放映時指針歸位
三、VBA方法終止PPT放映時啟用帶延時的循環過程小結
這裡所用的非常關鍵技術是設置一個全局的布爾型公有變量exit_flag作為是否退出放映的狀态;同時用SlidesShowWindows(1).View.State屬性捕獲放映狀态,并根據該狀态特定值做出相應的事件處理。
所以不能簡單地通過結束放映事件OnSlideShowTerminate去用Exit Sub簡單處理哦!
好了,今天就說到這裡,下一個作品将利用這個技術實現PPT放映是自動啟用我們自己設計的鐘表播放哦,希望大家到時候喜歡哦!
最後,還是希望大家點評和關注我的頭條号“跟我學Office高級辦公”哦,謝謝!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!