博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 VBA 实现在 PPT 最下边加个进度条
阅读量:7282 次
发布时间:2019-06-30

本文共 6080 字,大约阅读时间需要 20 分钟。

用 VBA 实现在 PPT 最下边加个进度条,方便查看进行到总长度的多少,

抓住了听讲人的心理:“啥时候才能讲完啊?”
进度条只能体现已播放的幻灯片张数,不能用于计时。
打开 PPT,按 Alt+F8 新建个宏,随便取个宏名,不用改宏作用区域,
点“创建”,删除模块里的内容,把代码复制过去。
(按 Alt+F11 之后插入模块也可以)
进度条宏的作者是水木社区的。

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 nextPagenewBar:        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    NextEnd 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 nextPagenewBar:        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    NextEnd 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 nextPagenewBar:  ' 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    NextEnd Sub

 

 

示例:

《Marry Me》   

 

转自:

  .用 VBA 实现在 PPT 最下边加个进度条.

 

转载地址:http://yckjm.baihongyu.com/

你可能感兴趣的文章
AppCompatActivity怎么对View做的拦截
查看>>
记b站的一次react尝试
查看>>
Binder IPC
查看>>
mpvue开发小程序
查看>>
LINUX使用LDAP进行统一认证
查看>>
linux 下 ifcfg-eth0 配置
查看>>
C++:sprintf()的用法
查看>>
Unity3d之Animation(动画系统)
查看>>
Winform/WPF中内嵌BeetleX的HTTP服务
查看>>
vmware server安装码
查看>>
jQuery插件AjaxFileUpload实现ajax文件上传
查看>>
Django 的模板中的数学运算
查看>>
Robotium中调用getActivity()方法导致程序挂起的研究浅析
查看>>
使用php计算排列组合的方法
查看>>
最全的用正则批量去除Teleport Pro整站下载文件冗余代码
查看>>
Mysql查询结果作为另一张表的更新内容
查看>>
Linux下软件包的多种安装方式
查看>>
[Errno 111] Connection refusedfailed to upload ker
查看>>
package 和 source folder 相互转换的方式
查看>>
Java线程:原子量
查看>>