PPT新视角:VBA应用技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 VBA之惑

许多人可能认为编写代码是一项神秘而又复杂的工作,同时也充满了疑惑。

↘ 疑惑一:学习VBA困难吗

这是许多初学者学习编程最大的心理障碍,随着时间的发展,所有的编程语言都在朝着极单化方向发展,VBA在这方面走在了前列。从这点上来说,学习VBA是容易的,是编程入门的最佳选择。另一方面,运用VBA编程只需要了解两个内容:一个是VBA语言规范,一个是组件对象(即COM)。VBA的语言规范指定了代码如何编写,执行的方式,而组件对象是可重用的二进制代码,如PowerPoint对象模型。VBA的终极目标是用最简单的语法访问应用程序对象以扩展其功能。

下面的代码,看起来就是这么简单,复杂的代码也不过是这些简单代码的有机排列。所以,学习VBA没有想象中的那么困难,有这种疑虑的人需要的是重塑信心。

        '把演示文稿中所有图形的颜色改变为红色
        Sub ChangeAllShapeColor()
            Dim sld As Slide, shp As Shape
            For Each sld In ActivePresentation.Slides
                For Each shp In sld.Shapes
                    shp.Fill.ForeColor.RGB=vbRed
                Next
            Next
        End Sub

↘ 疑惑二:为什么要在PPT中使用VBA

对于许多在VBA面前举棋不定的人来说,这是最常见的疑惑。笔者以为,在PPT中使用VBA主要有以下几个主要原因。

①自动完成重复的任务

尽管标准的PowerPoint用户界面(UI)中提供了丰富的功能集,可以完成大部分的任务,但是对于某些任务来说,需要不断地重复执行,而VBA在这方面有无与伦比的优势。

参考下面的代码,体会VBA与手工操作的差异。

        '将演示文稿中所有不等于32的字体替换为32
        Sub ChangeFontSize()
            Dim aSlide As Slide
            Dim aShape As Shape
            For Each aSlide In ActivePresentation.Slides
                For Each aShape In aSlide.Shapes
                    ' 图形上有文本框吗?
                    If aShape.HasTextFrame Then
                        ' 文本框中有文本吗?
                        If aShape.TextFrame.HasText Then
                            ' 文本是否小于32,是则改变为32
                            If aShape.TextFrame.TextRange.Font.Size <>32 Then
                                aShape.TextFrame.TextRange.Font.Size=32
                            End If
                        End If
                    End If
                Next
            Next
        End Sub

不用多说,你肯定有自己的答案了。

②让操作更准确,更快捷

在PowerPoint中,对一系列图形进行规则性排列是一项常见的任务,虽然利用鼠标也可以胜任,但是非常费时且不易精确控制,并且还达不到理想的效果,此时VBA可以大显身手。

参考下面的代码,是不是感觉到还是使用VBA来处理更迅速,更精确。

        Const pi=3.1415926
        Sub 排列图形()
            Dim tShp As Shape
            Set tShp=ActivePresentation.Slides(1).Shapes ("TempShp")
            Dim x0 As Single
            Dim y0 As Single
            Dim w0 As Single
            Dim h0 As Single
            '图形的中心点
            x0=tShp.Left+tShp.Width / 2
            y0=tShp.Top+tShp.Height / 2
            w0=tShp.Width / 2
            h0=tShp.Height / 2
            Dim shps As ShapeRange
            Dim shp As Shape
            Set shps=ActiveWindow.Selection.ShapeRange
            Dim angle As Single
            '角度
            angle=360 / shps.Count
            Dim x As Single
            Dim y As Single
            Dim i As Integer
            For Each shp In shps
                '图形的位置
                x=x0+w0 * Cos(i * angle * pi / 180)
                y=y0+h0 * Sin(i * angle * pi / 180)
                shp.Left=x - shp.Width / 2
                shp.Top=y - shp.Height / 2
                i=i+1
            Next
        End Sub

图1-12见证了奇迹的产生:

图1-12

③与用户交互

现在的演示文稿越来越重视交互的作用,交互让沟通由单向变为双向,使用VBA将极大地增强PPT在交互方面的功能。

参考下面的代码,这样的交互是不是智能多了。

        ' 演示答案选择的对错
        Public Sub Selectda(ByVal shp As Shape)
            Dim txtda As String, shpdui As Shape, shpcuo As Shape
            txtda=shp.TextFrame.TextRange.Text                   ' 获取所单击形状中的文本
            Set shpdui=ActivePresentation.Slides(1).Shapes("对")  '在答案对错时显示对错图片
            Set shpcuo=ActivePresentation.Slides(1).Shapes("错")
            '对答案进行判断
            Select Case txtda
                Case"100"    '对时显示对图片
                    shpdui.Left=shp.Left+shp.Width+10
                    shpdui.Top=shp.Top
                    shpdui.Visible=True
                    shpcuo.Visible=False
                Case Else    '错时显示错图片
                    shpcuo.Left=shp.Left+shp.Width+10
                    shpcuo.Top=shp.Top
                    shpdui.Visible=False
                    shpcuo.Visible=True
            End Select
        End Sub

上面代码的执行结果如图1-13所示。

图1-13

上面的代码实现的是一个很神奇的过程,如果你学会了VBA,比这神奇的效果还有很多。VBA是一个工具,是一个不断创造惊奇的工具。

④为PPT增加新的功能

如果希望在PPT演示的过程中,任意拖动所选择的对象,以展现某个图形的构建过程或者演示某个业务进程,使用VBA就能轻松实现,PPT本身是没有这项功能的。

下面的VBA代码可以轻松地解决这个问题。

        '在所拖动的对象上设置这个动作
        'sh表示所要拖动的对象
        Sub DragandDrop(sh As Shape)
            dragMode=Not dragMode   '是否处于拖动模式,如果是就拖动它
            If dragMode Then Drag sh
        End Sub

详细代码见本书盘,对象拖动效果图如图1-14所示。

⑤与其他Office应用程序交互

在PPT中使用VBA可以很方便地访问其他的Office应用程序,例如我们可以读取Excel中的数据在PPT中建立精美的图表,也可以根据Word中的文本自动生成若干个幻灯片。

⑥增强职场安全感

图1-14

现在的职场竞争非常激烈,每个人都在不断地给自己充电,以提高工作的效率和能力,VBA对于经常使用Office的办公一族来说就是能力的证明,能让你高效而轻松地工作,从而获得同事的尊敬和上司的肯定,极大地增强了你在职场中的安全感。

在PowerPoint中使用VBA的理由有千万种,它们驱动着人们的创造力和生产力。

↘ 疑惑三:VBA的末日到了

即使微软不再授权VBA许可证,并建议开发人员转往VSTO,而且也有人在不断鼓吹“VBA末日论”的观点,但我以为VBA的末日还远未来到,主要有以下几个原因。

目前基于VBA的解决方案有成千上万个,微软还没有找到好的迁移策略可以让现有的VBA代码轻松迁移到其他的平台。

①使用VBA更容易实现Office应用程序操作的自动化,且所需的代码较少。

②VBA的代码不需要部署庞大的.net框架,使用起来更容易,更直接。

③并不是所有的解决方案都需要写成COM,对于少量的代码来说更是如此。

④到目前为止,VBA是唯一可以在Office文档中嵌入代码的语言。

所以,VBA还将在很长的时间内生存下来,没有必要担心什么末日的问题。即使有朝一日VBA被抛进了历史的垃圾堆中,也并不代表你所学习的VBA知识毫无用处,VB.net秉承了VBA多数的特性,只需要了解两者之间并不太多的区别,你就能很快地由VBA转向VB.net,甚至其他的语言。