注意 |
當然,這個輸入方塊 InputBox 函數是獲得使用者資訊最簡單的方法。而要產生這些對話方塊,而更加彈性及複雜的方法是在 Visual Basic 編輯器中使用 自訂表單 功能。您可以在 Visual Basic編輯器 視窗中利用輔助說明瞭解如何使用這項 自訂表單 功能。 |
雖然您可以在 巨集 對話方塊中按一下 執行 按鈕執行巨集(請參閱 <如何執行巨集> )。而如果執行巨集就如同在PowerPoint中,利用功能表列中的指令或工具列中的按鈕,這樣的操作不也是更方便嗎?
當您建立一個自訂的工具列或加入一個自訂的功能表在功能表列中,實際上您就是利用這相同的方式自訂Microsoft的工具列。在這工具列中可以包含按鈕、功能表或是組合這兩項。
若要建立一個自訂的工具列並加入巨集到這工具列中,請依照下列的步驟操作:
一個新的且是空的工具列即顯示在畫面上,但如果這個新工具列與 自訂 對話方塊重疊,請將指標移向該工具列的標題列上以拖曳方式,將這工具列搬移到適合的位置。
圖20-9.在 自訂 對話方塊中,您可在左方的 類別 清單中選取 巨集 項目,然後在右方的 指令 窗格即顯示可供使用的巨集。 |
圖20-10.這個自訂的工具列其中的巨集按鈕包含了文字與圖示。 |
若要建立一個自訂的功能表並加入巨集到這功能表列中,請依照下列的步驟操作:
將巨集加入到您自訂的功能表(專屬區),請依照下列的步驟操作:
為了建立更複雜且精密的巨集,例如,這個巨集可以讓它自己做判斷該執行那一列的程式碼,則您需要瞭解如何使用這決策控制的陳述式架構。這個控制架構決定程式碼執行的順序。一般來說,巨集一次只執行一列的程式碼,從最前面的一列逐一往下執行到最後一列,除非在這相繼而來的執行過程中被某個 事件 (Event)或 決策控制結構 的控制項所改變,而這控制結構將會引起這個程序重複執行某一列的程式碼,或執行跳離這個程序的程式碼(例如GoTo陳述式)。
If...Then ...Else 不僅是最基本的決策控制陳述式,它同時也是最直覺式的,因為它非常清楚的表示它的用意。而決策控制的最簡單語法,是根據指定的條件是否存在。下列就是它的語法:
If條件1 Then執行程式碼1End 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 IfEnd 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 陳述式。這程式將繼續往下執行直到符合其中一個條件。
在這 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 IfEnd Sub
Concatenation是個很常的英文字單字,在VBA程式中其表示 連結運算 符號,利用它可以用以連結不同的字串、變數或運算式。而在輸寫的語法上使用 & 符號連結不同的字串或其他的變數。您只需很簡單的將 & 符號輸入在想要連結的資料之間即可。例如,這接下來的範例程式碼就是:連結 Your name is 的字串與存放在 YourName 變數中的資訊,請注意在輸入連結符號 & 時,請前後都要空一空格,以區隔文字字串與變數。
"Your name is" & YourName
當您參閱上述的範列,即發現這連結運算符號讓您為使用者提供更多詳細的回覆資訊。而下列的範例程式碼,將以 Date 函數為例以取得目前的日期,並指定將這個日期資訊放到 Today 變數中,所以這 & 符號將連結文字字串 今天是西元 與 Today 變數及一個句號(.),而這一連串的資訊將會指定要顯示在訊息方塊中,所以當執行這個程式時,將不會只出現今天的日期,而是顯示 今天是西元1999/10/12. 。別忘了, Date 是VBA另個最簡單的函數名稱。
Sub日期()Dim Today As StringToday = DateMsgBox 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 IfEnd Sub
除了在PowerPoint中使用巨集完成例行的工作外,您也可以使用VBA程式與Microsoft Office的其他程式產生互動。例如,建立一個PowerPoint巨集,經由這個巨集從Excel中帶進一些數字,或利用巨集將Word文件放入PowerPoint中。
如何在PowerPoint中使用VBA自動開啟Office其他應用程式,請依照下列的操作步驟錄製一個PowerPoint巨集,將Excel的工作表嵌入到簡報中,並加入程式調整這個嵌入的物件大小,同時並允許使用者在輸入方塊訊息中輸入要嵌入的檔案路徑。在開始錄製前,請先確定這Excel工作表中有現成的資料以方便在PowerPoint放映投影片時顯示出來。
在錄製完這個巨集後,請按 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 WithEnd 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).SelectEnd Sub
上述的引數 Width 和 Height 是設定 Workbook 物件的屬性,就是設定這工作表。要以手動方式調整工作表的大小,請選取這個物件後,在 編輯 功能表中按一下 工作表 物件 指令(或按一下滑鼠右鍵),再按一下 編輯 指令,此時請拖曳這嵌入物件的 控點 加大或縮小工作表的顯示內容,然後在這物件的外圍按一下滑鼠左鍵結束編輯這個物件。當您插入這個物件後,想要自動顯示較大的嵌入物件,您可以在這個巨集中增加 Width 和 Height 的數值。請注意,如果您是在VGA的顯示模式下,則 Width 和 Height 最大值分別是640與480。
如果想要在另一張投影片執行您剛剛所錄製的巨集執行這個巨集,將會插入相同的Excel工作表在這目前的投影片上,因為這是受到 ActiveWindow 這物件的程式碼所影響的。而在某些案例中,這嵌入的工作表有時會顯示出不妥當的形狀,而如果您輸入下列的四列程式碼請立即加在最後一列程式碼之後 End Sub 之前,即可以根據原始大小縮放這個物件以解決前面所提到的問題。
With ActiveWindow.Selection.ShapeRange .ScaleHeight 1, msoCTrue .ScaleWidth 1, msoCTrueEnd 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中建立自動的解決方案對策,請參閱:
|
联系客服