官术网_书友最值得收藏!

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,甚至其他的語言。

主站蜘蛛池模板: 饶河县| 克什克腾旗| 克什克腾旗| 阿图什市| 晋江市| 天镇县| 枣强县| 濮阳市| 平凉市| 东辽县| 宜都市| 太白县| 马边| 新沂市| 抚远县| 太原市| 黄龙县| 东方市| 玉溪市| 岑巩县| 汶川县| 诸城市| 靖宇县| 长春市| 萨嘎县| 东阳市| 玛多县| 长沙县| 南投市| 当阳市| 容城县| 山东省| 新竹市| 新疆| 曲沃县| 建湖县| 尉犁县| 北京市| 松原市| 静安区| 溧水县|