使用VBA讓PowerPoint的工作自動化

您透過PowerPoint內建的程式語言將簡化您在PowerPoint中的工作,而這個程式語言就是 Visual Basic for Application ,簡稱VBA。在PowerPoint中一個簡單的VBA程式可以自動完成一些很常執行的工作或處理很瑣碎的項目,否則您必須經由好幾個步驟才能完成這些工作。

所有包含在Microsoft Office 2000的軟體都共同分享這項VBA程式工具,它讓您在Office應用軟體中建立一個自動化的商用性對策。實際上,這可以取代選購一套專為貴公司所設計的軟體,因為有許多公司行號已經在使用Office軟體及VBA語言程式滿足他們的需求。例如:人力資源部門使用Word製作一份商用申請表格而不需要購買一套表格專用的產生器,在這份表格中將簡化人事部門檢視這份表格的過程並自動產生評估的結果。同樣的,您可以在PowerPoint中使用VBA產生工具列或功能表指令,以幫助您及在工作團隊中的其他人建立一份標準的簡報。

本章將提供如何使用語言程式解決在PowerPoint工作中自動化的介紹。


什麼是Visual Basic for Applications?

電腦語言就是下達命令給電腦使其執行該指令或動作。例如,您可以設計一個程式控制電腦,啟動電腦時,在螢幕上就顯示Hello的文字,而當關閉電腦時就顯示Bye的文字。電腦語言是一連串的指令(Code, 一般稱為程式碼),它是用來控制電腦去執行某些動作的語言(即程式)。

VBA,通常您使用它以產生一個code,它是BASIC程式語言最新的版本,同時被設計用以指導程式設計的初學者。BASIC的命令本來就是以英文書寫,所以您將發現它們很容易被理解的。

在您開始建立一個簡單的VBA程式之前,您必須清楚知道這個程式的一些基本處理程序,這些就是本章所討論的重點。所以您應該會知道如何:

  • 錄製巨集

  • 執行巨集

  • 檢視(或編輯)一個VBA巨集

  • 使用變數、參數

  • 從使用者獲得資訊

  • 將自己所錄製的巨集加入到自訂的工具列或功能表中,以方便您可以很快的找到這些巨集並執行它

  • 使用決策控制陳述式判斷應執行的程式


錄製一個簡單的巨集

在早期個人電腦的巨集(macroinstruction術語的縮寫)就是簡單的錄製下一連續的按鍵動作,然後將它指定在某個鍵盤上按鍵,而當按一下這個按鍵就可以再執行一次您所錄製的電腦操作。而Microsoft重新開發及延伸這早期的巨集觀念,而建立一個完全可以編輯程式的巨集程式語言以符合Office應用軟體的需求。之後Microsoft以真實的程式語言VBA融入到巨集的編輯語言中,VBA於是誕生。

巨集語言就是一種程式的語言,它內建在Microsoft Office軟體,以讓您自動完成一連串的工作,而這些工作被組合在一個單一的命令上。巨集的錄製允許您錄製下所需要的程式碼而自動完成一連串的工作。之後,當您再次需要完成這項工作時您可以再執行一次這個巨集。Microsoft Excel、Microsoft Word和Microsoft PowerPoint等應用程式都提供巨集錄製的功能,即VBA程式。

如何使用巨集的錄製功能

雖然當您使用巨集錄製的一長串的程式碼時您必須要很小心,因為當您錄下巨集的這些程式碼是一個延伸巨集內容很好的開始點。

如何錄製一個PowerPoint巨集

若要使用PowerPoint的巨集錄製功能,請依照下列的步驟操作:

  1. 在PowerPoint視窗中請在 工具 功能表中按一下 巨集 按鈕,再按一下 錄製新巨集 指令,此時開啟 錄製巨集 對話方塊,如圖20-1。

  2. 圖20-1. 在 錄製巨集 對話方塊中,您可為您所錄製的巨集取個名稱。
  3.  錄製巨集 對話方塊中,您可以指定下列的設定:
    • 改變巨集名稱以更貼切描述這個巨集的功能。

    • 指定將巨集儲存在某個已開啟的檔案上。而PowerPoint預設將巨集儲存在目前的簡報檔案。

    • 在敘述的文字方塊中可以加入一些有關這個巨集的說明文字。

  4.  錄製巨集 對話方塊中按一下 確定 按鈕,PowerPoint將會顯示 停止錄製 工具列在畫面上,而在這個工具列中只有一個 停止錄製 按鈕。

  5. 在PowerPoint中開始執行您所要錄製的操作。
  6. 完成巨集的錄製後,請按一下 停止錄製 按鈕。
如何執行巨集

無論您錄製什麼樣的巨集,只要您希望所錄製的巨集再執行一次,即可以執行這個巨集。在某些案例中,您或許會得到一個錯誤的訊息以指出這個巨集不能完成它試圖執行的命令。有時候像這樣的錯誤訊息產生是因為您正試著再執行一些已經做過的工作。例如,您試著開啟已經被開啟的檔案,或關閉已經被關閉的檔案。所以如果遇上這樣的例子,請先做必要的調整後再執行這個巨集。

若要執行您已經錄製完成的巨集,請依照下列的步驟操作:

  1.  工具 功能表中按一下 巨集 指令,在該層選單中再按一下 巨集 指令,此時開啟 巨集 對話方塊,如圖20-2。

  2. 圖20-2.在 巨集 對話方塊中,您可以執行、編輯、建立和刪除巨集。
  3. 請選取您要執行的巨集稱,再按一下 執行 按鈕。
如何檢視(或編輯)一個PowerPoint的巨集

當您錄製完或一個巨集後,您或許想要檢視它的內容,甚至想要編輯它。如何檢視(或修改)這個巨集呢?請依照下列的步驟操作:

  1. 請在 工具 功能表中按一下 巨集 指令,在該層選單中再按一下 巨集 指令,開啟 巨 集對話方塊。
  2. 在巨集清單中選取您要檢視或編輯的巨集名稱,再按一下 編輯 按鈕。

當您要編輯這個巨集,其實您是在PowerPoint視窗中開啟另一個應用程式─ Visual Basic編輯器 。(您是否注意到這個 Microsoft Visual Basic 視窗已經顯示,而且包含巨集程式的功能表及工具列。)當您第一次編輯這個巨集,這個Visual Basic編輯器視窗將會顯示如下所說明的三個視窗:

因為您可以排列、放大縮小或關閉這些視窗,所以在您目前所看到的 Microsoft Visual Basic 視窗並不一定如同本書圖20-3所顯示的一樣。想要 關閉專案-VBAProject 視窗,請按一下該視窗右上角 關閉視窗 按鈕。

圖20-3.Visual Basic編輯器視窗。

若要關閉這個 Microsoft Visual Basic 視窗,請在 檔案 功能表中按一下 關閉並回到PowerPoint 指令,或直接關閉這個視窗。

如何閱讀VBA

想要看懂VBA程式語言最好的方法是錄製一個簡單的巨集,然後在切換到 Microsoft Visual Basic 視窗瞭解它們的意思。之後您將學習如何寫下一些簡單的式碼。這些範例的程式碼都是簡短的,所以您可以很容易的複製這些程式碼並且在您的電腦上執行它。

舉例說明,我們要錄製一個開啟範例簡報檔案的巨集,而這個巨集名稱請取為 開啟範例簡報 ,它的目的是開啟一個PowerPoint現有的檔案。在您錄製巨集前請先開啟一個新簡報檔案(或一個已存在的檔案),並將它儲存在C:\My Documents資料夾,檔案名稱為 範例簡報 。然後請關閉這個檔案,再開啟另一個新簡報檔案要在這個檔案上錄製巨集,但您也可以開啟一個舊檔案錄製巨集。

若要錄製這個巨集,請依照下列的步驟操作:

  1. 請在 工具 功能表中按一下 巨集 指令,再按一下 錄製新巨集 按鈕,此時開啟 錄製巨集 對話方塊。
  2.  錄製巨集 對話方塊,請在 巨集名稱 文字方塊中輸入 開啟範例簡報 檔案,(若輸入英文名稱請在單字間不要留下空白!)然後按一下 確定 按鈕。
  3. 此時您會發現在PowerPoint視窗中出現一個 停止錄製 按鈕(如果這個工具列沒有顯示,請將指標移向任一工具列的按鈕上,按一下滑鼠右鍵,在快顯功能列上選擇 停止錄製 )。現在請在 檔案 功能表中按一下 開啟舊檔 指令。
  4. 請將 查詢 位置切換到 My Documents 資料夾上(如果目前的資料夾位置不在 My Documents 資料夾上,請您切換到該位置)。
  5. 請在這個資料夾內選取 範例簡報 檔案,再按一下 確定 按鈕。
  6. 請在 停止錄製 工具列中按一下 停止錄製 按鈕。

如果想要看看您剛剛所錄製的巨集內容,請在 工具 功能表中按一下 巨集 指令,然後在該層選單中再按一下 巨集 指令,然後在 巨集 對話方塊中選取 開啟範例簡報檔案 巨集名稱,再按一下 編輯 指鈕。

這巨集程式的內容應該如下所示:

Sub開啟範例簡報()
'
' 巨集錄製者: John Wu  錄製日期: 1999/10/12
'
Presentations.Open FileName:="C:\My Documents_
\範例簡報.ppt", ReadOnly:=msoFalse
End Sub
注意

在這些程式碼中,如果有出現底線( _ )符號,即表示以下的程式碼是這一列的延續。

若要閱讀在這個巨集中的VBA程式碼(如以上所示的),您必須對巨集有個基本的認識。第一點,每個被錄製下來的巨集就是一個 程序 ,而它被定義成一個命令以完成指定的工作。而每一個程序都以這個英文單字 Sub 開始,例如這個案例,在 Sub 之後就是巨集名稱和一對括弧。而所有的程序都以 End Sub 字串為結束點。

Sub NameOfThisSubroutine()
        Code
End Sub

第二點,VBA程式碼由主要的 物件 即一串的功能所組合而成,而您有兩種方式運用它們:

  • 設定或檢索這個物件的屬性

  • 使用這個物件的方法(或處理的過程)

例如,PowerPoint簡報就是一個物件,您在程式碼中得到簡報名稱,這就是物件中 Name 的屬性,而在程式碼中開啟這份簡報,這 Open 就是方法。所以操作物件的一般語法是:

object.property或object.method

在任何一行的程式碼,您可以設定物件的屬性或完成的方法,但不能同時執行這兩項。

這個範例的程式碼如之前所示(或重覆如下),Presentation 物件 使用Open 方法 (以粗體字顯示)。在這個程式碼中,第一個程式碼是Presentation這個物件,而這個物件的第一個動作是Open的方法,如下所示:

 Presentations.Open
FileName:="C:\My Documents_\範例簡報.ppt", ReadOnly:=msoFalse

接續在Open 方法 的程式碼是由一串的描述文字所組成的(或其他的資訊),這些是方法所要求的,為的是去做一些事情。在這同一個的程式碼中(如上所示),第一個描述是FileName,第二個是ReadOnly。每一個描述都接者一個「: =」(冒號等於),然後根據這描述的資訊執行所指定的方法。而這每個描述的資訊都以粗體字來顯示。

Presentations.Open FileName:= "C:\ My Documents_
\範例簡報.ppt"
, ReadOnly:= msoFalse

這個FileName描述的資訊使用中括弧及等於符號,用來說明您要開啟的簡報檔案路徑及名稱,並且由字串符號(")括起來。在VBA中,所有的文字字串都必須使用字串符號(")將它們前後括起來,以讓VBA知道這是一般的文字而不是拼錯單字的物件、屬性或方法。而ReadOnly描述的資訊是一個值(也稱之為內部的常數),它是內建在VBA而且等於False。這 ReadOnly:=msoFalse 所產生的結果是:這個檔案是在唯讀的情況下,不可以開啟這份簡報檔案。

有關VBA語法

這裡有兩種其他的方法是您必須知道如何閱讀(或寫下)VBA:

  • 每一個VBA的屬性或方法以及每個VBA的陳述或功能(專為命令所產生的程式名稱),都是單一的一列程式碼(即使這些程式碼為了展示其目的而陳述太長,將會自動換列),而在最後都以一個 換行鍵 為結束。例如,在這個範例的巨集中 Presentations.Open FileName:="C:\My Documents\範例簡報.ppt", ReadOnly:=msoFalse 就是一列的單一程式碼,而最後以 換行鍵 為結束點。

  • 文字開始於一個撇號(')之後即表示這是巨集的一個備註說明。(這個備註說明將供您參閱的,而巨集將會忽略它並不認為它是程式碼。)這備註文字的預設顏色是綠色。所以就之前所提供的範例巨集,這備註文字如下所示:
    ' 巨集錄製者: John Wu  錄製日期: 1999/10/12
    請注意這個備註文字將被視為單一的一列程式碼,即使為了陳述其內容而自動換列。而這個備註文字也在最後的字串1999/10/12之後出現
     換行鍵。 

注意

請不要隨意的按 ENTER 鍵,否則將打斷 VBA 的屬性、方法、陳述、功能及備註,而將其分為好幾個列。

如何延伸巨集的內容

使用錄製巨集的功能所產生的程式碼在某些陳述上是指固定的位置,換句話說,它只能完成您錄製時的指定動作。例如,就您之前所錄製的巨集而言,它只能開啟您指定位在My Documents資料夾內的檔案─範例簡報。若要將這位置的陳述轉換為適用性更寬廣的程式碼需要使用這兩項技術:一是加入變數,另一種是由使用這巨集的人自行輸入所需要的可變資訊。

想像電視機是接受單一頻道的硬體,所以您必須擁有3台電視機以觀看主要的三個網路頻道。(請暫時不要考慮有線電視。)程式碼將不會使用如電視機般無效率的只選用單一的頻道。

 變數 是以單一的文字來命名,它們儲存不同型態的資料。這個資料或許來自於使用者或來自於另一個巨集。每一個程式語言能夠讓您將兩個一般型態的資料放在一起─字串資料(string)和數值資料(integers)。一些程式語言,如VBA,也支援很多種其他的資料型態。

最好的練習方法,當常去呼叫一個變數,也就是說在開始撰寫一個程式時即列出變數清單和代表每個變數可使用的資料型態項目。您可以使用鍵盤輸入這個呼叫的變數 Dim...As 然後緊接著單一字串的變數名稱(例如,FileToOpen)再加上資料型態(例如字串"C:\My Documents\範例簡報.ppt")。

例如,在下列的範例程式碼中,緊接在 MyName 這個變數之後的是文字字串,再設定這個變數等於 "Sharon" ,然後將這個變數所指定的文字內容顯示在訊息方塊中,則這個MsgBox就是VBA的一個功能,它開啟一個訊息視窗在您的螢幕上,而在 MsgBox 之後的文字資訊將立即顯示在這個訊息視窗中。請注意因為 MyName 是個變數,所以這個變數的文字將不會顯示在訊息視窗中,而是顯示 MyName 所等於之後的字串,以這個例子來說就是 Sharon 。(請注意這些變數名稱並不包含引號內的字串。)

Sub MyName ()
Dim MyName As String
MyName = "Sharon"
MsgBox prompt:= MyName
End Sub

請依照下列的步驟操作,您可以建立一個新的巨集並輸入上述的程式碼,然後試驗這變數是如何執行的(同時看看如何寫下程式碼):

  1. 開啟一份新的簡報。
  2.  工具 功能表中按一下 巨集 指令,在該層選單中再按一下 巨集 指令。
  3.  巨集 對話方塊中,請在 巨集名稱 文字方塊中輸入一個單一的文字串(即文字間不加入空白),例如,輸入 MyName 
  4. 按一下 建立 按鈕,開啟 Microsoft Visual Basic 編輯器視窗。

如果您剛建立的巨集是在您目前PowerPoint簡報中的第一個巨集,這個MyName程序將會顯示在這 程式碼 視窗的最上一列。不然,它將會顯示在這份簡報檔案中其他巨集之後。(如果您所開啟的簡報檔案已建立過一些巨集,而當您再根據上述的步驟操作撰寫另一個VBA程式時,將會新增一個Module(模組)儲存您目前的程式。)此時將會在 程式碼 視窗中看到如下所示的內容:

Sub MyName()
End Sub
注意

您可調整 程式碼 視窗以方便您只查看目前想要編輯的巨集名稱的程式碼內容,請在 程式碼 視窗的左下角上按一下 程序檢視 按鈕,即只顯示目前插入點所在的巨集名稱的程式碼內容,而不顯示其他在同一個模組(Module)內的巨集,當然您只要再按一下 全模組檢視 按鈕可再檢視這個模組內的所有巨集程式碼。

若要加入程式碼在這個程序內,請依照下列的步驟操作:

  1. 插入點目前應該停在 End Sub 這一列的上方空白列上。
  2. 請輸入第二列程式碼的內容,以宣告MyName這個變數是包含一連串的文字。
  3. Dim MyName As String

    請注意當您在輸入時,Visual Basic編輯器會提出一連串的關鍵字清單(其排序根據英文字母的次序),而這個選項也會因為您所輸入的第二個或第三個的字母而提出相關的項目,例如,當您開始輸入 string 時,Visual Basic編輯器會列出第一個字母是s開頭的項目(如圖20-4),但當您輸入到 str 字串時在這清單中 string 即顯示出來,此時您不需要完全輸入這個變數的全部字串,只需按 ENTER 鍵就會將這個 string 變數放在插入點所在的位置上。

  4. 當輸入完第二列的程式碼後,請按 ENTER 鍵新增第三列,在這一列要設定變數 MyName 等於 Sharon 字串。
  5. MyName="Sharon"
  6. 同樣的輸入完第三列的程式碼後,請按 ENTER 鍵新增到第四列,在這一列中將 Sharon 字串顯示在一個訊息方塊中。
  7. MsgBox Prompt:=MyName

您是否注意到當輸入 MsgBox 函數後按一下 空白鍵 時,Visual Basic編輯器會列出一串 MsgBox 函數所需要的完整引數串列,如圖20-5。雖然它會花去您一些時間在閱讀像這樣的提示引數串列,但之前請您務必要瞭解,在這引數串列中 粗體字 的引數是必要的,而其他無粗體字樣式的文字引數是可供選擇的。所以這個提示的意思是:在 MsgBox 函數緊接著需要一個 Prompt 引數,以告知這個 MsgBox 函數將顯示的內容。在這個例子中,將會顯示變數名稱 MyName 所指定的內容。

圖20-4.當您輸入程式碼時,Visual Basic編輯器將顯示其相對應的程式提示。

圖20-5. 當您輸入MsgBox這關鍵字串時,Visual Basic編輯器將顯示這個MsgBox函數所需要的完整引數串列。

現在,您可以利用下列這兩種方法執行這個巨集(程式)。

  • 切換到PowerPoint視窗後,然後在 巨集 對話方塊中執行這個巨集。

  •  Visual Basic編輯器 視窗,請確定插入點(即游標)已停在該MyName程序的任一列程式碼,然後在 一般 工具列中按一下 執行Sub或UserForm 按鈕。(如圖20-6。)


  • 圖20-6. Visual Basic編輯器的一般工具列。

當您執行這個巨集後,您應該可以看到如圖20-7所顯示的一個訊息方塊。

圖20-6. 執行MyName巨集所顯示出變數名稱MyName所指定的內容。

若要想改變這個巨集以顯示另一個姓名,請在這個程式碼中,將第二列MyName = "Sharon"的Sharon改為其他的姓名。例如,輸入 John Wu 

MyName = " John Wu "

根據下列所顯示的程式碼內容,將會在訊息方塊中顯示 George Washington 是美國第一任總統。

MyName = "George Washington是美國第一任總統"

若要結束Visual Basic編輯器,請在 檔案 功能表中按一下 關閉並回到Microsoft PowerPoint 指令。

提供訊息方塊以便執行這巨集的人輸入資料

雖然這些在您的巨集中,其變數的內容可以很輕易的被修改,如同上述所舉的一個程序(巨集)例子,但仍然是固定的陳述程式碼。換言之,只有這個程式設計者(就是您本人)可以在變數 MyName 輸入要顯示在訊息方塊中的資訊。然而,如果能讓使用者(不是程式設計者)指定訊息方塊所要顯示的內容,這將更有意義。

若想讓使用者提供資訊到您的巨集中,最簡單的方法是:使用 Inputbox 函數,它將在訊息方塊中提供一空白列,讓使用您巨集的人輸入資料。這個 Inputbox 函數與 MsgBox 函數類似,都會要求需要Prompt引數。在這個例子中,將告訴您的使用者您所希望他們輸入的資料。所以在下列的範例巨集中將要求使用者在訊息方塊中輸入他們的姓名,之後即顯示在隨後的訊息方塊中。

Sub YourName()
Dim YourName As String
YourName=InputBox(Prompt:="請輸入您的姓名")
MsgBox Prompt:= YourName
End Sub

請注意在這個程序中,變數 YourName 並不是等於任何的文字,如 Christine  王一一 ,而是等於 InputBox 函數的結果。換言之,變數 YourName 的內容是設定成等於使用者在 InputBox 所顯示的方塊中所輸入的資料。而在 InputBox 函數後方由 Prompt 引數所指定的文字資訊(即在字串符號內的文字)且由括弧所括起的,即是顯示在訊息方塊中的提示資訊,以讓使用者在執行這個函數時知道需輸入什麼資料。當使用者輸入他姓名後,這訊息將會傳回到變數 YourName ,然後再由 MsgBox 函數將它的內容顯示在另一個訊息方塊中。如圖20-8-1和圖20-8-2左方的輸入方塊提示使用者輸入資料,右方的訊息方塊中顯示和使用者輸入資料的結果。

圖20-8.無論使用者在輸入方塊中(左圖)輸入什麼資料,都將顯示在訊息方塊中(右圖)。


注意

當然,這個輸入方塊 InputBox 函數是獲得使用者資訊最簡單的方法。而要產生這些對話方塊,而更加彈性及複雜的方法是在 Visual Basic 編輯器中使用 自訂表單 功能。您可以在 Visual Basic編輯器 視窗中利用輔助說明瞭解如何使用這項 自訂表單 功能。

如何建立一個更容易執行巨集的使用者界面

雖然您可以在 巨集 對話方塊中按一下 執行 按鈕執行巨集(請參閱 <如何執行巨集> )。而如果執行巨集就如同在PowerPoint中,利用功能表列中的指令或工具列中的按鈕,這樣的操作不也是更方便嗎?

當您建立一個自訂的工具列或加入一個自訂的功能表在功能表列中,實際上您就是利用這相同的方式自訂Microsoft的工具列。在這工具列中可以包含按鈕、功能表或是組合這兩項。

如何將巨集加入到自訂的工具列

若要建立一個自訂的工具列並加入巨集到這工具列中,請依照下列的步驟操作:

  1. 請在 檢視 功能表中按一下 工具列 指令,然後再按一下 自訂 指令。
  2.  自訂 對話方塊中,按一下 工具列 標籤。
  3. 按一下 新增 按鈕。

  4. 請在 新增工具列 對話方塊中輸入一個新工具列的名稱。
  5. 按一下 確定 按鈕。
  6. 一個新的且是空的工具列即顯示在畫面上,但如果這個新工具列與 自訂 對話方塊重疊,請將指標移向該工具列的標題列上以拖曳方式,將這工具列搬移到適合的位置。

  7.  自訂 對話方塊中,按一下 指令 標籤,然後在左方的類別清單中選取 巨集 項目。此時在右方的 指令 窗格中顯示目前在這簡報中已錄製或寫下的巨集。如圖20-9。

  8. 圖20-9. 在 自訂 對話方塊中,您可在左方的 類別 清單中選取 巨集 項目,然後在右方的 指令 窗格即顯示可供使用的巨集。
  9.  指令 窗格中,將常用的巨集逐一拖曳到您剛新增的新工具列視窗中。此時如下圖所顯示的自訂工具列,即顯示您拖曳進來的巨集名稱。

  10. 當您第一次將巨集加入到工具列時,這巨集的名稱即顯示在該工具列中。如果要加入一圖案在這巨集名稱旁,請在 自訂 對話方塊按一下 修改選取範圍 按鈕。
  11. 然後在 修改選取範圍 功能選項中,按一下 變更按鈕圖片 指令。
  12. 請在圖示清單中選取適合該巨集的圖案。
  13. 最後在 自訂 對話方塊中按一下 關閉 按鈕。如圖20-10所示的自訂工具列,即包含代表巨集的圖示按鈕。

  14. 圖20-10. 這個自訂的工具列其中的巨集按鈕包含了文字與圖示。
如何將巨集加入到自訂的功能表

若要建立一個自訂的功能表並加入巨集到這功能表列中,請依照下列的步驟操作:

  1. 請在 檢視 功能表中按一下 工具列 指令,然後再按一下 自訂 指令。
  2.  自訂 對話方塊中,按一下 指令 標籤,然後在左方的類別清單中選取 新功能表 項目,此時在右方的 指令 窗格中即顯示 新功能表 
  3. 請將位在 指令 窗格中的 新功能表 拖曳到PowerPoint的功能表列中。您可以預測這個位在功能表上的位置,經由拖曳 新功能表 時所出現的超大型指標。您不妨試著將 新功能表 放在 視窗 功能表的左方。
  4. 當您將 新功能表 放在功能表中後,請將指標移向它並按一下滑鼠右鍵。(或按一下 修改選取範圍 按鈕。)
  5. 請在 名稱 文字方塊中給予這個功能表一個貼切的名稱(例如,專屬區),並按 ENTER 鍵。如下圖所示:

將巨集加入到您自訂的功能表(專屬區),請依照下列的步驟操作:

  1. 請在 自訂 對話方塊中,按一下 指令 標籤,並在 類別 選項中選取 巨集 項目。
  2. 在右方的 指令 窗格中,將某個巨集拖曳到您新增的功能表中,此時將出現一個小方塊,請將巨集拖曳到這個方塊中,做為這項新功能表的指令項目。
  3. 請按一下 關閉 按鈕結束這個 自訂 對話方塊。如下圖所示的在自訂功能表中的巨集指令。


建立進階的巨集以執行有條件的程式

為了建立更複雜且精密的巨集,例如,這個巨集可以讓它自己做判斷該執行那一列的程式碼,則您需要瞭解如何使用這決策控制的陳述式架構。這個控制架構決定程式碼執行的順序。一般來說,巨集一次只執行一列的程式碼,從最前面的一列逐一往下執行到最後一列,除非在這相繼而來的執行過程中被某個 事件 (Event)或 決策控制結構 的控制項所改變,而這控制結構將會引起這個程序重複執行某一列的程式碼,或執行跳離這個程序的程式碼(例如GoTo陳述式)。

  •  事件 是外部的元件,它將會影響電腦程式,例如,在指定的一段時間內讓使用者按一下指定的按鈕或開啟指定的檔案。

  •  決策控制 是處理電腦語言本身內部在判斷過程中的方法,其最基本的VBA控制架構就是 If...Then ...Else 

If...Then ...Else陳述式

 If...Then ...Else 不僅是最基本的決策控制陳述式,它同時也是最直覺式的,因為它非常清楚的表示它的用意。而決策控制的最簡單語法,是根據指定的條件是否存在。下列就是它的語法:

If條件1 Then
執行程式碼1
End If

當程式在執行這個 決策控制的陳述式時,它首先會判斷 條件1 ,如果條件1是符合的(即真值),則程式繼續執行下一列的程式碼─程式 碼1;但如果條件1是不符合的(即偽值),則程式將跳過程式碼1而直接執 行在End If之下的第一列程式碼 。換言之,當您指定的資料(或使用者輸入的資料)符合所定義的條件,則執行符合條件的程式,反之則執行不符合的程式。例如,下列所顯示的範例程式碼:如果x等於1,電腦就發出嗶的聲音,但如果x不等於1,則不執行任何程式。想要建立這個巨集(即程序)並使用變數,其方法就如同本章先前所描述的 <如何使用變數> ,請輸入下列的程式碼做為練習。之後,請給予不同的x數值,然後在 一般 工具列中按一下 執行Sub或Useform 按鈕執行這個程式並觀查其變化。

Sub ExampleI()
    Dim x As Integer
    x = 1
    If x = 1 Then
        Beep
    End If
End Sub

 Beep  VBA 陳述式中最簡單的方法之一:只執行它被指定的動作。

兩個陳述式:ElseIf及Else,它們允許您加入其他的驗証資料在 If...Then...Else 的決策控制中。使用這兩個選擇性的陳述式可以讓您的程式碼根據目前的狀況(或使用者的輸入資料)產生不同的動作(或結果)。請參閱下列的範例程式碼(這由中括弧所包圍的選項是決策控制中的一部份。)

If條件1 Then
	程式碼1
[ElseIf條件2 Then
	程式碼2]
[ElseIf條件3 Then
	程式碼3]
.
.
.
[ElseIf條件N Then
	程式碼N]
[Else
	其他的程式碼]
End If

當執行這個決策控制的程式時,將首先判斷 條件1 ,如果符合便執行 程式碼1 ,當執行完 程式碼1 則直接跳到 End If 之下的第一列程式碼。然而,如果不符合 條件1 ,這程式將跳到 ElseIf 陳述式並判斷是否符合 條件2 ,如果符合則執行 程式碼2 而且也將執行在 ElseIf 之下的第一列程式碼,如果不符合,這程式將跳到下一個 ElseIf 陳述式。這程式將繼續往下執行直到符合其中一個條件。

  •  ElseIf 的條件是真的(在這個例子中,將執行這區塊中的程式碼。)

  • 此決策控制程式將會往下執行直到找到某個符合條件的陳述式。(在這樣的例子中,沒有任何的程式碼在這決策控制中被執行。)

  • 此時這個程式會執行 Else 的陳述式程式碼。

在這 If...Then...Else 決策控制的陳述式中也可以只有一個 Else ,它總是放在最後的陳述式,而且它是沒有條件說明的,所以當所有的條件都不符合時將會執行 Else 的程式。

這裡有個較為複雜的範例,其使用 If...Then...Else 。它的程式碼顯示在這段落的下方,這程式碼的意思是:如果x等於-1而且y也等於-1,則請電腦發出嗶的聲音;但如果y等於0則電腦將不執行任何動作;如果x或y等於其他的數字,則請電腦出現一個訊息方塊,而且在方塊中顯示 Hi! 的文字訊息。再提醒您,想要建立這個巨集(即程序)並使用變數,其方法就如同本章先前所描述的 <如何使用變數> ,並請試著給予x與y不同的數字並觀查其變化。

Sub ExampleII()
    Dim x As Integer
    Dim y As Integer
    x = -1
    y = 0
    If x = -1 And y = -1 Then
        Beep
    ElseIf y = 0 Then
    Else
        MsgBox prompt:="Hi!"
    End If
End Sub

連結運算符號

Concatenation是個很常的英文字單字,在VBA程式中其表示 連結運算 符號,利用它可以用以連結不同的字串、變數或運算式。而在輸寫的語法上使用 & 符號連結不同的字串或其他的變數。您只需很簡單的將 & 符號輸入在想要連結的資料之間即可。例如,這接下來的範例程式碼就是:連結 Your name is 的字串與存放在 YourName 變數中的資訊,請注意在輸入連結符號 & 時,請前後都要空一空格,以區隔文字字串與變數。

"Your name is" & YourName

當您參閱上述的範列,即發現這連結運算符號讓您為使用者提供更多詳細的回覆資訊。而下列的範例程式碼,將以 Date 函數為例以取得目前的日期,並指定將這個日期資訊放到 Today 變數中,所以這 & 符號將連結文字字串 今天是西元  Today 變數及一個句號(.),而這一連串的資訊將會指定要顯示在訊息方塊中,所以當執行這個程式時,將不會只出現今天的日期,而是顯示 今天是西元1999/10/12. 。別忘了, Date 是VBA另個最簡單的函數名稱。

Sub日期()
Dim Today As String
Today = Date
MsgBox prompt:="今天是西元 " & Today & "."
End Sub

比較運算符號

比較運算符號(Comparison Operators)是一群數學上的標記,您可以使用它們撰寫比較的陳述式。其中最簡單的比較運算符號是=(等於)符號,而其他的比較運算符號,請參閱下列的清單。

=等於
<>不等於
<小於
>大於
<=小於或等於
>=大於或等於

接下來的範例使用 If...Then...Else 決策控制檢查使用者是否在 輸入訊息方塊 中輸入有效的數字。如果輸入正確的數字,程式會將它與一個說明的文字字串連結並顯示在訊息方塊中;否則,電腦將會發出嗶的聲音並且出現一個訊息方塊,以告知使用者他所輸入的數字是不正確的。既然 InputBox 函數要顯示出文字字串(String)與提示輸入的數字範圍(即大於或等於的比較運算符號),您必須使用 Val 函數將字串轉換為數字。

注意

使用Val函數是將之後括弧內的資料轉換為數字(文字或可變的字串轉換為數字),例如,Val("10")=10。

Sub ShowAnswer()
    Dim Answer As String
    Answer = InputBox(Prompt:="Enter a number_from 1 through 99")
    If Val(Answer) <= 99 And Val(Answer) >= 1 Then
        MsgBox Prompt:="You entered: " & Answer & "."
    Else
        Beep
        MsgBox Prompt:="You entered an invalid number."
    End If
End Sub

使用VBA自動開啟Office程式

除了在PowerPoint中使用巨集完成例行的工作外,您也可以使用VBA程式與Microsoft Office的其他程式產生互動。例如,建立一個PowerPoint巨集,經由這個巨集從Excel中帶進一些數字,或利用巨集將Word文件放入PowerPoint中。

如何在PowerPoint中使用VBA自動開啟Office其他應用程式,請依照下列的操作步驟錄製一個PowerPoint巨集,將Excel的工作表嵌入到簡報中,並加入程式調整這個嵌入的物件大小,同時並允許使用者在輸入方塊訊息中輸入要嵌入的檔案路徑。在開始錄製前,請先確定這Excel工作表中有現成的資料以方便在PowerPoint放映投影片時顯示出來。

  1. 在PowerPoint中,切換到一張空白投影片以剛好顯示Excel的工作表,例如,選用一張 只有標題 投影片,同時請不要在這張投影上選取任何物件。
  2.  工具 功能表中按一下 巨集 指令,再按一下 錄製新巨集 按鈕,請將巨集名稱改為 InsertWorkbook 
  3. 請依照下列的步驟錄製巨集:在 插入 功能表中按一下 物件 指令,開啟 插入物件 對話方塊。

  4.  插入物件 對話方塊中,請選擇 檔案來源 項目。
  5. 按一下 瀏覽 按鈕開啟 瀏覽 對話方塊,請切換資料夾位置便選擇檔案,以嵌入到目前的PowerPoint簡報。
  6. 當選取Excel檔案後,請按一下 確定 按鈕,回到 插入物件 對話方塊。
  7. 請在 插入物件 對話方塊,按一下 確定 按鈕,此時嵌入的Excel工作表即顯示在PowerPoint的簡報上。
  8. 請按一下 停止錄製 按鈕。

在錄製完這個巨集後,請按 Alt+F11 組合鍵開啟Visual Basic編輯器檢視這個巨集的程式碼。當然這個巨集包含您嵌入工作表的路徑:D:\office2000\銷售預估一覽表.xls。而您也會注意到一些數值,其記錄這個嵌入物件的高度及寬度(或許不同)。然而,您的巨集的內容應該與下列所示的程式碼相去不遠。

Sub insertworkbook()
'
' 巨集錄製者: John Wu  錄製日期: 1999/10/12
'

    ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject(Left:=120#, Top:=110#, Width:=480#, Height:=320#, _
    FileName:="D:\office2000\銷售預估一覽表.xls", Link:=msoFalse).Select
    With ActiveWindow.Selection.ShapeRange
        .Left = 154.125
        .Top = 103.125
        .Width = 411.75
        .Height = 333.75
    End With
End Sub

由於這個巨集不需要一些冗長的程式碼,請刪除下列所指定的程式碼(因為這將更容易的調整物件的大小):

With ActiveWindow.Selection.ShapeRange
        .Left = 154.125
        .Top = 103.125
        .Width = 411.75
        .Height = 333.75

現在您的巨集內容應該與下列所示的程式碼相似吧!

Sub insertworkbook()
'
' 巨集錄製者: John Wu  錄製日期: 1999/10/12
'

 ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject
(Left:=120#, Top:=110#, Width:=480#, Height:=320#, _
    FileName:="D:\office2000\銷售預估一覽表.xls", Link:=msoFalse).Select
End Sub

上述的引數 Width  Height 是設定 Workbook 物件的屬性,就是設定這工作表。要以手動方式調整工作表的大小,請選取這個物件後,在 編輯 功能表中按一下 工作表 物件 指令(或按一下滑鼠右鍵),再按一下 編輯 指令,此時請拖曳這嵌入物件的 控點 加大或縮小工作表的顯示內容,然後在這物件的外圍按一下滑鼠左鍵結束編輯這個物件。當您插入這個物件後,想要自動顯示較大的嵌入物件,您可以在這個巨集中增加 Width  Height 的數值。請注意,如果您是在VGA的顯示模式下,則 Width  Height 最大值分別是640與480。

如果想要在另一張投影片執行您剛剛所錄製的巨集執行這個巨集,將會插入相同的Excel工作表在這目前的投影片上,因為這是受到 ActiveWindow 這物件的程式碼所影響的。而在某些案例中,這嵌入的工作表有時會顯示出不妥當的形狀,而如果您輸入下列的四列程式碼請立即加在最後一列程式碼之後 End Sub 之前,即可以根據原始大小縮放這個物件以解決前面所提到的問題。

With ActiveWindow.Selection.ShapeRange
            .ScaleHeight 1, msoCTrue
            .ScaleWidth 1, msoCTrue
End With

所以您目前的巨集內容,應該下列所示:Sub insertworkbook() ' ' 巨集錄製者: John Wu 錄製日期: 1999/10/12 ' ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject (Left:=120#, Top:=110#, Width:=480#, Height:=320#, _ FileName:="D:\office2000\銷售預估一覽表.xls", Link:=msoFalse).Select With ActiveWindow.Selection.ShapeRange .ScaleHeight 1, msoCTrue .ScaleWidth 1, msoCTrue End With End Sub

如果要讓使用者可以在輸入方塊中,自行輸入要嵌入的Excel工作表的檔案路徑,請在這個巨集的註解文字之下加入這幾列的程式碼:

Dim WhichWorkbook As String
    WhichWorkbook = InputBox(prompt:="請輸入嵌入至簡報的Excel工作表路徑及檔案名稱(.xls).")

請將嵌入Excel工作表的路徑改為 WhichWorkbook 變數,所以現在 FileName 的參數應該如下所示:

FileName:=WhichWorkbook

最後,您的巨集內容應該如下所示:

Sub insertworkbook()
'
' 巨集錄製者: John Wu  錄製日期: 1999/10/12
'
    Dim WhichWorkbook As String
    WhichWorkbook = InputBox(prompt:="請輸入嵌入至簡報的Excel工作表路徑及檔案名稱(.xls).")
    ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject
(Left:=120#, Top:=110#, Width:=480#, Height:=320#, _
    FileName:=WhichWorkbook, Link:=msoFalse).Select
        With ActiveWindow.Selection.ShapeRange
            .ScaleHeight 1, msoCTrue
            .ScaleWidth 1, msoCTrue
        End With
  End Sub

當您完成這個巨集後,請在 檔案 功能表中按一下 關閉並回到Microsoft PowerPoint 指令。

請切換到另一張投影片,然後執行 insertworkbook 巨集,此時將會出現 輸入訊息方塊 ,請輸入要嵌入的Excel工作表檔案路徑,但別忘了要加上.xls副檔名。

注意

如果想要在PowerPoint中建立自動的解決方案對策,請參閱:

  • Visual Basic編輯器的線上輔助說明。

  • 由Christine Solomon編著的Microsoft Office Developer's Handbook,由Microsoft Press出版。



    Copyright1997-2001 SoftChina Corporation. All rights reserved.