PowerPoint的VBA设计中Shape对象运用方法初探 摘要: VBA是面向对象的程序设计语言,在PowerPoint中VBA设计编码时,常需要对灯片上对“形状”对象进行操作,而形状对象的名称总是让我们弄不清楚。本文讨论PPT形状对象是怎么命名的?命名规律是怎样的?讨论形状对象在设计时作为触发对象和行为对象的应用方法,从而设计出丰富多彩的PPT,希望能为初学者在VBA设计时提供一些帮助。 关键词:形状对象;控件对象;多媒体对象;slide;shape;形状名称 VBA设计是PowerPoint的高级应用不可避免的。VBA是面向对象的程序设计语言,事件和行为的设置都是基于对象的,我们把放置到一张幻灯片上的任何东西称为“对象”,如一个按钮、一个文本框或一个声音。为了说明方便,这里我把对象分成三类: “控件”、“形状”和“多媒体”。在用VBA设计时,首先要指定“对象”,这就需要对象要有一个名称。再通过在“代码窗口”进行 “对象”指定、“事件”选择和 “行为”代码编程等套路式操作完成对PPT设计,如下(图-1): 图-1 “控件”指的是从“控件工具箱”插入的对象(视图/工具栏/控件工具箱),控件的名称在控件“属性”窗口(选择一个控件/点击“控件工具箱”中左上角的“属性”按钮)不仅可以查到系统自动分配给它的名称,而且用户可以修改(名称)右边的值,给控件重新命名。可见,在VBA设计时,无论是触发对象还是代码中的行为对象,如果对象名不知道,就无法实现该对象应用。 对于“多媒体”对象,这里是指通过PPT菜单插入“影片与声音”对象,它们在PPT上的外形设置是通过“设置图片格式”。动作设置是通过PPT的“自定义动画”。因为它只有单一的“播放/停止”行为,一般不需要VBA编程控制,因此它的名称并不重要。本文仅讨论在PPT设计中“形状”对象的名称问题。对于以上两类对象的名称问题以下不再赘述。 狭义的讲,“形状”对象这里是指通过PPT的“插入”菜单插入的“图片”、“文本框”和“对象”等。对“形状”对象的效果设置时,我们首先会想到PPT的“自定义动画”功能,因为它不涉及VBA代码编写,操作方便简单,而被多数用户喜爱和普遍使用。它是一个PPT集成化工具,主要用于“形状”对象动态演示效果的设置。其设置过程实际体现了VBA编程思想,“添加效果”就是在选择目标对象的“行为”,触发器的选择就是在指定“触发对象”,“开始”设置中虽然只有简单的三项 “单击时”、“之前”、“之后”,也就是在选择“事件”。在触发器指定列表中我们会看到所有插入到当前幻灯片中的对象列表,但唯一不包含“控件对象”。如果是从外部文件插入的对象,其名称则是原文件名,具体的说就是插入图片、音频和视频。其它形状系统则自动生成一个名称,比如:“矩形 X”、“形状 X”(X是一个数字编号)。注意,这个列表中的对象名称并不能用于VBA设计时指定对象,但以后我们会发现那个序号X是对我们是有帮助的。可是如果我们要对上述形状设计更复杂的动作时,“自定义动画”就无能为力了,只能通过VBA编码了。 广义的讲,在PPT的slide中插入任何一个对象(包括上述三类对象),都会在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 Shapes(i).Top = 30 Shapes(i).Left = 30 Shapes(i).Width = 578.125 Shapes(i).Height = 386.625 Next End Sub 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 …………………(省略3—9)……............... Sub ten() For i = 1 To 10 Shapes(i).Visible = msoFalse Next Shapes(10).Visible = msoTrue ’只显示图片shapes(10) End Sub SlideShowWindows(Index:=1).View.Exit ’结束播放 End Sub 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)对象,但“控件”对象虽然也有“形状名称”,但一般不用形状名称指定,而是用“控件名”指定。形状名称Shape(i)在VBA设计时有一定局限性,它不能在VBA代码窗口中直接作为触发对象,只能通过对象的“动作设置”进行,也没有丰富的“事件”选项,它不可能象“控件”对象那样完备。尽管如此,当我们清楚了形状名称的规律后,在VBA设计时就能准确指定对象,从而通过VBA编码让这些形状对象产生以前无法实现的效果。为我们进行PPT高级应用作好准备。 |
|