注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oh! I see you!

Hi! ppmm~~

 
 
 

日志

 
 

PPT进度条制作——PowerPoint幻灯片_WPS演示(WPP)  

2010-07-11 12:39:34|  分类: Office |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文链接:http://oicu.cc.blog.163.com/blog/static/1230394712010611039349/

用 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()
' by
dukenuke@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.Fill.ForeColor.RGB = RGB(255, 255, 255)
        ' pageSHower.Fill.Transparency = 0.7  ' 透明度
        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

 

http://v.youku.com/v_show/id_XMTg4ODY4ODU2.html

  评论这张
 
阅读(10888)| 评论(7)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017