当你使用Office三剑客(Word,Excel,PowerPoint)重复多个步骤去实现某个需求的时候,你是否曾经梦想过如果能有一个按钮,点一下就能把我刚刚做的那么多个步骤刷刷刷的自动就完成了,那该有多好啊!


这个自动批处理的功能真的有,就是宏命令。在《高效代劳工具属我最“宏”》一文中我们介绍过在Excel中录制宏和运行宏的方法。


如果你要实现的自动化处理是在Word或Excel中,那恭喜你,很简单就可以实现你的需求,利用开发工具选项卡的“录制宏”功能,像用录音机录制说的话一样,可以把你要重复执行的操作录制下来,下次再想实现这个需求,把录制好的宏播放一遍就可以了。



如果碰巧你重复要实现的操作是在PowerPoint中,那就麻烦了,因为在PowerPoint中没有录制宏这个命令的。


作为一个开发了基于Word,Excel,PowerPoint三个组件的ET插件的人,如果我告诉你我其实从来没有系统学习过VBA开发,你肯定会不信。但事实的确如此,到现在除了几个常用的判断、循环语句我能记得住之外,其他语句的编写我全靠谷歌搜索。


古典老师在他所著的《跃迁:成为高手的技术》一书中说到:


知道知识在哪儿,比知道知识是什么更重要。

大脑不该用来记忆,而是要用来观察、思考、创造和影响他人。

未来世界的认知能力,是找到信息的搜索能力、运用信息的思考能力以及从大量信息里抓取趋势的洞察能力


今天就通过一个案例给你揭秘ET插件开发的秘密。在春节假期,我开发了一门全新的线上课程,名为《悦享读书笔记PPT制作》



这门课程是介绍如何制作读书笔记PPT的,在制作PPT笔记的时候,经常需要将书中的金句有力的呈现出来。我通常的设计就是找一张与金句主题相关的图片,在上方叠加一层渐变蒙版,然后再把金句放在旁边。这是我从涛说PPT的创始人刘哲涛老师的作品中学习到的设计。


涛说PPT-《梁宁 产品思维30讲》学习笔记


在录制课程的时候,介绍到制作渐变蒙版需要4个操作步骤:

1、绘制一个和图片相同大小的矩形,将矩形的边框颜色设置为无边框

2、右键设置形状格式,选择渐变填充,修改渐变光圈为2个

3、修改2个渐变光圈的填充颜色和透明度

4、移动这个渐变蒙版的位置,叠加在图片的上方


一本书常常有好多金句,如果每次都重复这些步骤来添加渐变蒙版,岂不是很麻烦。有没有一键自动生成的方法?自从开发了ET插件之后,这是我问自己最多的一个问题。


到底能不能开发出来这个功能呢?试试就知道了。首先,我要把这个功能的需求进行分解。


1 绘制一个和图片相同大小的矩形


绘制矩形的语句怎么写?不知道,没关系,我有谷歌搜索。在搜索框中输入关键词:vba ppt insert shape



下面就可以出现很多搜索结果,只要有基础的英文阅读能力,很快就可以找到我们需要的代码。


比如第一个搜索结果Microsoft Docs中就有非常详细的代码介绍,更重要的是有案例说明,可以直接复制粘贴到PowerPoint中执行。



你可以在PowerPoint中点击“开发工具-Visual Basic",进入VBA编辑界面。



在左侧点击鼠标右键,选择“插入-模块”。



在右侧空白的位置输入以下的语句,其中test是过程的名称,你可以自由输入。


Sub test()


End Sub


之后就可以把我们刚刚复制的代码复制粘贴到中间,之后点击上方的绿色三角形运行这个过程



再点击第一个按钮返回到PowerPoint界面,就可以看到第一页出现了一个矩形框了。



现在我简单解释一下这条语句的含义


Set myDocument = ActivePresentation.Slides(1) ‘将当前演示文稿的第一张幻灯片作为对象赋给对象变量myDocument


myDocument.Shapes.AddShape Type:=msoShapeRectangle, _ Left:=50, Top:=50, Width:=100, Height:=200 '在myDocument也就是当前演示文稿的第一张幻灯片中插入形状,类型是

msoShapeRectangle(矩形),后面Left是左侧的位置,Top是顶端的位置,Width是宽度,Height是高度。


代码我们已经理解了,现在需要进行优化。首先,我们不是要在第一张幻灯片插入,是当前页面插入。其次,尺寸和位置是要根据我所选择的图片来确定。


所以,我们需要如何读取当前选择对象的大小和位置。我们可以在谷歌搜索中输入搜索关键词:vba ppt selection




通过搜索了解到可以通过ActiveWindow.Selection的语句来引用当前所选对象。所以我们将代码改成下面所示的语句,通过ActiveWindow.Selection.ShapeRange来表达当前选择的对象,后面通过小圆点引用位置和尺寸。


Sub test()


Dim l, t, w, h As Integer


l = ActiveWindow.Selection.ShapeRange.Left

t = ActiveWindow.Selection.ShapeRange.Top

w = ActiveWindow.Selection.ShapeRange.Width

h = ActiveWindow.Selection.ShapeRange.Height


ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, l, t, w, h).Select


End Sub


以下为运行结果,为了看清下面的图片,我移动了一下矩形的位置,实际上是直接覆盖在图片上方的。



到这里第一个需求就搞定了。


2 将矩形的填充颜色设置为渐变填充


我要实现的是从左到右的双色渐变填充,所以我可以用关键词:vba ppt TwoColorGradient进行搜索,以下是搜索出来的结果。




ForeColor是第一个渐变色的颜色,BackColor是第二个渐变色的颜色,后面的TwoColorGradient就是双色渐变填充,里面是渐变的方向。


Sub test()


Dim l, t, w, h As Integer


l = ActiveWindow.Selection.ShapeRange.Left

t = ActiveWindow.Selection.ShapeRange.Top

w = ActiveWindow.Selection.ShapeRange.Width

h = ActiveWindow.Selection.ShapeRange.Height


ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, l, t, w, h).Select '插入矩形

ActiveWindow.Selection.ShapeRange.Fill.TwoColorGradient msoGradientVertical, 1 '添加双色渐变,方向从左到右

ActiveWindow.Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0) '渐变色1:黑色

ActiveWindow.Selection.ShapeRange.Fill.BackColor.RGB = RGB(0, 0, 0) '渐变色2:黑色

ActiveWindow.Selection.ShapeRange.Fill.GradientStops(2).Transparency = 1 '渐变色2:100%透明

ActiveWindow.Selection.ShapeRange.Line.Visible = msoFalse '矩形无边框


End Sub


这是运行之后的效果:



在正式功能中我将填充颜色修改为当前演示文稿的主色调,这是案例的动图展示:



如果你也对如何在Office中编写自动化的VBA模块感兴趣,不妨让谷歌搜索来助你一臂之力吧。