ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12316|回复: 6

[分享] 详解ppt中两个自动运行的宏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-10 09:35 | 显示全部楼层 |阅读模式
                                                 PowerPoint的两个自动运行宏
[内容提要]PowerPoint是款非常优秀的多媒体编著与演示平台,提供了各种各样的功能以满足人们的多种需要,不过有很多高级的功能却深藏在系统中不为人所知。这里把本人挖掘出的OnSlideShowPageChange和OnSlideShowTerminate两个能在放映过程中自动运行的宏介绍给大家,以期抛砖引玉,激发大家对PowerPoint的进一步探究。
宏对于经常使用MS Office的人来说是再熟悉不过的东西了,为了定制或扩展Office的功能我们经常用VBA开发各种各样的宏。自动化运行的宏是在应用程序进行某种操作或处于某种状态时能被激活而自动的执行其中的代码的VBA宏程序块,如Excel中有四个自动执行的宏:Auto_Open、 Auto_Close、 Auto_Activate 和 Auto_Deactivate等。由于这些宏能自动被执行,为编程开发应用程序提供了非常友好的环境。
一、难寻的PowerPoint自动运行宏
Office系统中的主要程序几乎都有内置的能自动运行的宏,可对于PowerPoint,我查看了所能收集到的所有资料,包括微软的官方网站及其Office开发资源网站MSDN上的中英文资料,都说它不具有自动运行的宏,最后又“白度”中国,“Google”世界,再“Yahoo”全球,还是没有找到说PowerPoint有自动运行宏的资料,有的只有说在PowerPoint的Add-In(加载项)插件中有自动化运行的宏Auto_Open和Auto_Close。
作为开发工具,没有内置的自动化运行的宏是肯定不行的,难道初始化程序的运行环境,程序运行中要自动完成某个操作,程序运行结束后环境的清理等等,这些操作都要我们开发一个加载项插件到每个需要运行我们程序的电脑上去安装?这太可怕了,真的像有人所说的PowerPoint不适合用作多媒体课件开发的平台吗?这么易用的PowerPoint就这样被废掉了吗?不,决不。经过本人多方查找和测试,终于发现了两个神秘的宏:OnSlideShowPageChange和OnSlideShowTerminate,它们能在演示文稿开始放映、放映过程中及放映结束时自动运行,实现我们自动化的要求。
二、OnSlideShowPageChange宏的使用
下面我们来研究一下这两个宏的功能与运行的条件。先来看OnSlideShowPageChange宏,我们新建一个演示文稿,并把PowerPoint宏的安全级别设置为启用全部宏,在演示文稿中添加几张幻灯片,为便于测试说明,从第一张幻灯片开始,我们按顺序给它们输入数字编号“1、2、3、4……”,再按Alt+F11快捷键启动VBA编辑器,在其中插入一个模块,向代码窗口中输入如下代码:
Sub OnSlideShowPageChange()
   MsgBox "I love you, PowerPoint."
End Sub
点击“保存”按钮,保存文档,文件名如Test.ppt(PowerPoint 2007中为Test.pptm),返回幻灯片编辑视图,按F5键进行放映,我们首先会看到一个显示“I love you, PowerPoint.”的消息框,点击确定后,放映第一张幻灯片,再点击鼠标左键,放映到第二张,也会出现同样的消息框,后面各张的放映的情形也是这样。这说明我们的宏在放映时及放映过程中被正确地执行了,还说明这个宏是在放映时就自动运行,以后只要有幻灯片切换都会被激发而运行。根据它的特性,只要是在幻灯片放映开始时就要完成的任务,或是放映过程中需要不断重复做的处理都可以交给它来完成。同时,这个宏也很适合用来对PowerPoint放映环境进行初始化设置,不过应做一下改进,因为初始化只需要一次,反复做会浪费系统资源,改进后的示例代码如下:
Sub OnSlideShowPageChange()
    If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then
        MsgBox "I love you, PowerPoint."
    End If
End Sub
再保存后运行,怎么样,是不是只在放映开始时出现一次消息框,以后幻灯片再切换就看不到消息框了,我们的目的达到了,今后在实际开发中只是放映过程中要反复执行的代码块就放在Sub OnSlideShowPageChange()和End Sub之间,即代替掉“If Then End If”语句块,凡是开始放映时只需运行一次的代码块就放在    If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then和End If之间,即把MsgBox "I love you,PowerPoint."语句替换成我们自己的代码块就行了。
三、OnSlideShowTerminate宏的使用
现在我们再来研究一下OnSlideShowTerminate宏的用法,还是用前面建立的PowerPoint实列文档Test.ppt,打开文档后在VBA编辑器窗口中输入下面的代码:
Sub OnSlideShowTerminate()
    MsgBox "Good bye, and take care!" "
End Sub
保存后返回PowerPoint幻灯片编辑视图,按F5进行放映,在放映开始出现显示“I love you, PowerPoint.”消息框,这是OnSlideShowPageChange宏的功劳,前面已讲过,点“确定”后继续播放直至结束,我们又会看到一个写着“Good bye, and take care!”的消息框,现在是OnSlideShowTerminate宏在起作用。由此我们可以看出,OnSlideShowTerminate宏只在结束幻灯片放映时被激活发挥作用,用它我们可以处理放映完成后的环境清理工作,只要把我们的相关代码放在Sub OnSlideShowTerminate()和End Sub中间替换掉MsgBox "Good bye, and take care!"语句就OK了。
PowerPoint是一个非常易用的多媒体制作平台,只需要很少的编程就能制作出非常优秀出色的课件,如果再运用好OnSlideShowPageChange和OnSlideShowTerminate这两个在放映时能自动运行的宏,就更能如虎添翼,使我们的课件更专业更完美,使PowerPoint成为老师们手中最强大的多媒体制作利器。(文中的代码在PowerPoint 2000—2007中测试通过。)

TA的精华主题

TA的得分主题

发表于 2016-1-11 16:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
需要在幻灯片1中添加任何一个控件比如标签框
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2016-1-16 10:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2016-11-24 09:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很赞!!!!收藏了!
顺路帮忙解决一下如下问题,注意是在全屏放映的时候,即按f5放映的时候
请教一下各位,比如这段 Application.ActivePresentation.Slides(1)   问题是:如何用msgbox 跳出当前是第几个放映灯???比如如上那段是人为的指第1个   ,谢谢!急用!再比如说 msgbox   .slides.counts是弹出当前总共有多少个放映灯片,那当前第几个是怎么样表达呢?
门外汉一个,大家不要笑话,百度找了几天了找不到!
刚好需要在PPT中给小孩子制作一个自动播放当前绘本页面对应的音频以及文本,谢谢!

顺路问一下在PPT中如何自动跳出文本几秒并自动消失?(自动播放指定路径的音频已经在网上找到答案了)

拜托了!
下午找到了一个 方法 ActiveWindow.Selection.SlideRange.SlideNumber
但是在全屏放映的时候 这个方法行不通!因为提示无激活窗口

等待高手到来!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-30 14:29 | 显示全部楼层
wangyihong99 发表于 2016-11-24 09:14
很赞!!!!收藏了!
顺路帮忙解决一下如下问题,注意是在全屏放映的时候,即按f5放映的时候
请教一下各 ...

这样表达:
Activepresentation.slideshowwindow.View.CurrentShowPosition

TA的精华主题

TA的得分主题

发表于 2017-12-11 10:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享,!!!

TA的精华主题

TA的得分主题

发表于 2018-6-22 11:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-28 18:46 , Processed in 0.051707 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表