用 VBA 實現在 PPT 最下邊加個進度條,方便查看進行到總長度的多少,
抓住了聽講人的心理:“啥時候才能講完啊?”
進度條只能體現已播放的幻燈片張數,不能用於計時。
打開 PPT,按 Alt+F8 新建個宏,隨便取個宏名,不用改宏作用區域,
點“創建”,刪除模塊里的內容,把代碼復制過去。
(按 Alt+F11 之后插入模塊也可以)
進度條宏的作者是水木社區的dukenuke。
Sub ProgressBar() ' by dukenuke@newsmth.net ' Sun Jul 11 00:06:13 2010 Dim mySlides As Slides Dim pageBar As ShapeRange Dim pageSHower As Shape Dim pageWidth, pageHeight, pageStep Set mySlides = Application.ActivePresentation.Slides pageWidth = Application.ActivePresentation.SlideMaster.Width pageHeight = Application.ActivePresentation.SlideMaster.Height pageStep = pageWidth / mySlides.Count On Error Resume Next For i = 2 To mySlides.Count Set pageBar = mySlides.Item(i).Shapes.Range(Array()) Set pageBar = _ mySlides.Item(i).Shapes.Range(Array("RectanglePageNum")) If IsNull(pageBar) Or pageBar.Count = 0 Then GoTo newBar Set pageSHower = pageBar.Item(1) GoTo nextPage newBar: Set pageSHower = mySlides.Item(i).Shapes.AddShape( _ msoShapeRectangle, 0, _ pageHeight - 3, i * pageStep, 3) pageSHower.Name = "RectanglePageNum" nextPage: pageSHower.Fill.ForeColor.RGB = RGB(179, 162, 199) pageSHower.Line.Visible = msoFalse pageSHower.Width = i * pageStep pageSHower.Top = pageHeight - 3 pageSHower.Left = 0 pageSHower.Height = 3 Next End Sub
顏色尺寸可以更改,現在的高度是3,在頁面最下方,顏色是淡紫色。
PowerPoint 2007/2010 需要另存為帶宏的演示文稿,還可以把宏按鈕添加
到快速訪問工具欄。
開始講 PPT 前先運行宏(按 Alt+F8 或用快速訪問工具欄),運行一次即可,
播放幻燈片時就會自動加上進度條,只有第一頁不加,會自動根據當前頁
面數刷新進度。
注:增減幻燈片(總頁數改變)后要重新運行一次宏。
2010-9-12,對宏進行更新:
Sub ProgressBar() ' bydukenuke@newsmth.net ' Sun Jul 11 00:06:13 2010 ' ' Update by oicu#lsxk.org ' 2010/9/12 20:44 ' 對首頁以及隱藏幻燈片進行處理 Dim mySlides As Slides Dim pageBar As ShapeRange Dim pageSHower As Shape Dim pageWidth, pageHeight, pageStep Dim MyArray() As Variant '增加一個數組以便統計隱藏的幻燈片 Dim i, j, k j = 0 k = 0 Set mySlides = Application.ActivePresentation.Slides pageWidth = Application.ActivePresentation.SlideMaster.Width pageHeight = Application.ActivePresentation.SlideMaster.Height ' pageStep = pageWidth / mySlides.Count ReDim MyArray(mySlides.Count, 0) For i = 1 To mySlides.Count'統計隱藏的幻燈片數 If mySlides.Item(i).SlideShowTransition.Hidden = True Then j = j + 1 MyArray(i, 0) = 1 Else MyArray(i, 0) = 0 End If Next '除去首頁和隱藏的幻燈片后計算進度條長度增量 If mySlides.Count - 1 - j > 0 Then pageStep = pageWidth / (mySlides.Count - 1 - j) Else pageStep = 0 End If On Error Resume Next For i = 1 To mySlides.Count ' 改為從1開始 k = k + MyArray(i, 0) ' 計算當前隱藏的幻燈片數 Set pageBar = mySlides.Item(i).Shapes.Range(Array()) Set pageBar = _ mySlides.Item(i).Shapes.Range(Array("RectanglePageNum")) If IsNull(pageBar) Or pageBar.Count = 0 Then GoTo newBar Set pageSHower = pageBar.Item(1) GoTo nextPage newBar: Set pageSHower = mySlides.Item(i).Shapes.AddShape( _ msoShapeRectangle, 0, _ pageHeight - 3, i * pageStep, 3) pageSHower.Name = "RectanglePageNum" nextPage: pageSHower.Fill.ForeColor.RGB = RGB(179, 162, 199) pageSHower.Line.Visible = msoFalse ' pageSHower.Width = i * pageStep ' 計算進度條長度時除去首頁和隱藏的幻燈片 pageSHower.Width = (i - 1 - k) * pageStep pageSHower.Top = pageHeight - 3 pageSHower.Left = 0 pageSHower.Height = 3 ' 刪除首頁和隱藏的幻燈片的進度條 If i = 1 Or MyArray(i, 0) = 1 Then pageSHower.Delete Next End Sub
WPS演示安裝了vba之后同樣可以使用宏制作進度條,不過要修改幾個地方才能使用。
Sub ProgressBar() ' by oicu#lsxk.org ' 2010/9/18 22:48 ' For WPS 演示 Dim mySlides As Slides ' Dim pageBar As ShapeRange Dim pageSHower As Shape Dim pageWidth, pageHeight, pageStep Dim MyArray() As Variant '增加一個數組以便統計隱藏的幻燈片 Dim i, j, k j = 0 k = 0 Set mySlides = Application.ActivePresentation.Slides ' pageWidth = Application.ActivePresentation.SlideMaster.Width ' pageHeight = Application.ActivePresentation.SlideMaster.Height ' WPS演示不能取得母板的長寬,改成PageSetup pageWidth = Application.ActivePresentation.PageSetup.SlideWidth pageHeight = Application.ActivePresentation.PageSetup.SlideHeight ReDim MyArray(mySlides.Count, 0) For i = 1 To mySlides.Count ' 統計隱藏的幻燈片數 If mySlides.Item(i).SlideShowTransition.Hidden = True Then j = j + 1 MyArray(i, 0) = 1 Else MyArray(i, 0) = 0 End If Next ' 除去首頁和隱藏的幻燈片后計算進度條長度增量 If mySlides.Count - 1 - j > 0 Then pageStep = pageWidth / (mySlides.Count - 1 - j) Else pageStep = 0 End If On Error Resume Next For i = 1 To mySlides.Count ' 改為從1開始 k = k + MyArray(i, 0) ' 計算當前隱藏的幻燈片數 ' WPS演示會自動增加數字在RectanglePageNum名稱后面, ' 無法用下面的方法清除原有的進度條!只能循環刪除。 For j = 1 To mySlides.Item(i).Shapes.Count If VBA.Left(mySlides.Item(i).Shapes(j).Name, 16) = _ "RectanglePageNum" Then mySlides.Item(i).Shapes(j).Delete Next ' Set pageBar = mySlides.Item(i).Shapes.Range(Array()) ' Set pageBar = _ mySlides.Item(i).Shapes.Range(Array("RectanglePageNum")) ' If IsNull(pageBar) Or pageBar.Count = 0 Then GoTo newBar ' Set pageSHower = pageBar.Item(1) ' GoTo nextPage newBar: ' mso改為kso Set pageSHower = mySlides.Item(i).Shapes.AddShape( _ ksoShapeRectangle, 0, _ pageHeight - 3, i * pageStep, 3) pageSHower.Name = "RectanglePageNum" nextPage: pageSHower.Fill.ForeColor.RGB = RGB(179, 162, 199) pageSHower.Line.Visible = ksoFalse ' mso改為kso ' 計算進度條長度時除去首頁和隱藏的幻燈片 pageSHower.Width = (i - 1 - k) * pageStep pageSHower.Top = pageHeight - 3 pageSHower.Left = 0 pageSHower.Height = 3 ' 刪除首頁和隱藏的幻燈片的進度條 If i = 1 Or MyArray(i, 0) = 1 Then pageSHower.Delete Next End Sub
示例:
《Marry Me》 http://v.youku.com/v_show/id_XMTg4ODY3MjE2.html
轉自:
順順在線.用 VBA 實現在 PPT 最下邊加個進度條.http://hi.baidu.com/zunx/blog/item/811f35d331b95f143bf3cf03.html