分享

PowerPoint的VBA设计中Shape对象运用方法初探

 王咸美 2013-04-03

PowerPointVBA设计中Shape对象运用方法初探

摘要: VBA是面向对象的程序设计语言,PowerPointVBA设计编码时,常需要对灯片上对“形状”对象进行操作,而形状对象的名称总是让我们弄不清楚。本文讨论PPT形状对象是怎么命名的?命名规律是怎样的?讨论形状对象在设计时作为触发对象和行为对象的应用方法,从而设计出丰富多彩的PPT,希望能为初学者在VBA设计时提供一些帮助。

关键词:形状对象;控件对象;多媒体对象;slideshape;形状名称

VBA设计是PowerPoint的高级应用不可避免的。VBA是面向对象的程序设计语言,事件和行为的设置都是基于对象的,我们把放置到一张幻灯片上的任何东西称为对象,如一个按钮、一个文本框或一个声音。为了说明方便,这里我把对象分成三类: 控件形状多媒体。在用VBA设计时,首先要指定对象,这就需要对象要有一个名称。再通过在代码窗口进行 对象指定、事件选择和 行为代码编程等套路式操作完成对PPT设计,如下(图-1):

-1

控件指的是从控件工具箱插入的对象(视图/工具栏/控件工具箱),控件的名称在控件属性窗口(选择一个控件/点击控件工具箱中左上角的属性按钮)不仅可以查到系统自动分配给它的名称,而且用户可以修改(名称)右边的值,给控件重新命名。可见,在VBA设计时,无论是触发对象还是代码中的行为对象,如果对象名不知道,就无法实现该对象应用。

对于多媒体对象,这里是指通过PPT菜单插入影片与声音对象,它们在PPT上的外形设置是通过设置图片格式。动作设置是通过PPT自定义动画。因为它只有单一的播放/停止行为,一般不需要VBA编程控制,因此它的名称并不重要。本文仅讨论在PPT设计中形状对象的名称问题。对于以上两类对象的名称问题以下不再赘述。

狭义的讲,形状对象这里是指通过PPT插入菜单插入的图片文本框对象等。对形状对象的效果设置时,我们首先会想到PPT自定义动画功能,因为它不涉及VBA代码编写,操作方便简单,而被多数用户喜爱和普遍使用。它是一个PPT集成化工具,主要用于形状对象动态演示效果的设置。其设置过程实际体现了VBA编程思想,添加效果就是在选择目标对象的行为,触发器的选择就是在指定触发对象开始设置中虽然只有简单的三项 单击时之前之后,也就是在选择事件。在触发器指定列表中我们会看到所有插入到当前幻灯片中的对象列表,但唯一不包含控件对象。如果是从外部文件插入的对象,其名称则是原文件名,具体的说就是插入图片、音频和视频。其它形状系统则自动生成一个名称,比如:矩形 X形状 XX是一个数字编号)。注意,这个列表中的对象名称并不能用于VBA设计时指定对象,但以后我们会发现那个序号X是对我们是有帮助的。可是如果我们要对上述形状设计更复杂的动作时,自定义动画就无能为力了,只能通过VBA编码了。

广义的讲,在PPTslide中插入任何一个对象(包括上述三类对象),都会在slide上产生一个形状图案,系统都会自动为它生成一个形状名称,对象的名称是根据其插入时的顺序,系统自动给出的,如:shapes(1)shapes(2) … 。这些对象名称才是可以用于VBA设计时指定形状对象的。我们会发现前面触发器列表中形状序号X可能不是连续的,因为插入“控件”和“图片、声音、视频”对象也会按顺序生成这样一个shapes(i)的形状名称。因此导致我们VBA设计时,形状名称无法准确对应幻灯片中的shape。而在PowerPoint形状名称无法“控件”那样方便的在属性窗口改名。Shape只能在代码中通过该对象的NAME属性来进行更改比较麻烦!

我们可以从另一个角度来思考这个问题,Shape名称既然不好改,我们何必非要改?只要我们搞清楚形状命名规律就不会影响在VBA设计时准确指定shape对象。这种数组的系统命名方式甚至在实际VBA编码时有一定的优势。Shape系统命名及应用规律如下:

1)任何对象的名称是根据其插入时的顺序,系统自动产生的,如:shapes(1)shapes(2) … 。前面提到的“自定义动画”的触发器列表中,对于系统生成的形如“形状 X”的对象,其对应的shape名称就是:shapes(x)

2)事实上,所有slide中的对象的形状名称是由叠放次序决定的,当你改变某一对象的叠放次序后,则所有形状名称shapes(i)中的序号会随之改变。越下层的对象shape(i)序号越小,底层的对象的形状名称是shapes(1)

3)形状名称是不会出现在“代码窗口”的触发对象列表中的,如需要将形状对象作为触发对象,是以对象的“动作设置”方式设置的(幻灯片放映/动作设置),其中有“单击鼠标”和“鼠标移过”两种件事类型。以“运行宏”的方式产生行为动作。“宏”代码段在“代码窗口”中完成。

4)如果在“代码窗口”编写行为代码时,则直接使用shapes(i)指定对象。例如:单击鼠标时shapes(1)对象在幻灯片上不可见,代码如下:

Private Sub CommandButton1_Click()

Shapes(1).Visible = msoFalse '隐藏 对象shapes(1)

End Sub

下面以一个VBA应用实例说明shape对象的运用方法:先在幻灯片中插入10张图片,根据叠放层次确定10个图片的形状名称分别是:shapes(1)shapes(2) …shapes(10);再插入10个自选图形,形状名称分别是:shapes(11)shapes(12) …shapes(20)按次序排好,分别在自选图形添加文字“展示第1张图片”、“展示第2张图片”……“展示第10张图片”。添加一个按钮,caption属性设为“结束展示”。将以下代码粘贴在slide1(代码)框内:

Sub OnSlideShowPageChange()

For i = 1 To 10 全部图片在播放时自动调整好展示位置和图片尺寸

Shapes(i).Top = 30

Shapes(i).Left = 30

Shapes(i).Width = 578.125

Shapes(i).Height = 386.625

Next

End Sub

Sub one()

For i = 1 To 10

Shapes(i).Visible = msoFalse

Next

Shapes(1).Visible = msoTrue 只显示图片shapes(1)

End Sub

Sub two()

For i = 1 To 10

Shapes(i).Visible = msoFalse

Next

Shapes(2).Visible = msoTrue 只显示图片shapes(2)

End Sub

…………………(省略39)……...............

Sub ten()

For i = 1 To 10

Shapes(i).Visible = msoFalse

Next

Shapes(10).Visible = msoTrue 只显示图片shapes(10)

End Sub

Private Sub CommandButton1_Click()

SlideShowWindows(Index:=1).View.Exit 结束播放

End Sub

Sub OnSlideShowTerminate() 在停止播放时隐藏全部图片

For i = 1 To 10

Shapes(i).Visible = msoFalse

Next

End Sub

依次选择自选图形,进行“动作设置”(幻灯片放映/动作设置),在“鼠标单击选项卡中”分别选择“运行宏”slide1.one slide1.two …… slide1.ten

完成制作后运行一下看看效果吧。本PPT中只含一张幻灯片,播放时,可反复、无顺序的逐张展示10张图片,全部图片自动按设置的尺寸在固定位置展示,退出播放时隐藏所有图片,防止在编辑窗口误删除图片。以上的设置都正确完成了,也许您播放PPT的时候,有可能无法产生设计的效果,原因可能是您计算机的宏的安全性设得太高了,请单击“工具安全性”,将“安全级”设为“中”或“低”。保存、退出PPT,重新打开PPT,方可正常播放。

综上所述,PPT系统对插入幻灯片中的所有对象都会自动生成一个数组样式的“形状名称”,形状名称的序号是由叠放层次决定的。在VBA设计时,“形状名称”可用于指定形状(shape)对象,但“控件”对象虽然也有“形状名称”,但一般不用形状名称指定,而是用“控件名”指定。形状名称Shapei)在VBA设计时有一定局限性,它不能在VBA代码窗口中直接作为触发对象,只能通过对象的“动作设置”进行,也没有丰富的“事件”选项,它不可能“控件”对象那样完备。尽管如此,当我们清楚了形状名称的规律后,在VBA设计时就能准确指定对象,从而通过VBA编码让这些形状对象产生以前无法实现的效果。为我们进行PPT高级应用作好准备。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多