用 VBA 實現在 PPT 最下邊加個進度條


用 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM