字體:小 中 大 | |
|
|
2009/03/03 12:54:39瀏覽6566|回應0|推薦0 | |
VBA for Powerpoint 的實例比較少見, 我也很少實際寫來用。當我想把一個新增空白投影片按鈕的Powerpoint VBA巨集製作成增益集的時候, 查了資料才知道, 原來 Powerpoint 的 auto_open() 和 auto_close() 只有在增益集才有效。(開啟或關閉 ppt 檔,它裡面的auto_open() 和 auto_close() 不會自動執行。 ) 網友的問題是:「我使用 Powerpoint 2003,按「新投影片」時,新增的投影片都會有「按一下以新增標題」這樣的框框。我知道可以到物件配置方式,按「空白」的物件配置方式,以變成空白,或直接在左邊頁面欄,複製貼上一個空白的頁面,但這樣有點麻煩,可以做到按「新投影片」時,新增的投影片就是空白的嗎?」 針對這個需求, 我寫了一個 VBA (底下的NewBlankSlide) 副程式, 它會把「空白」物件配置的新投影片插在最後一張。而為了方便使用,我把它做成一個會在 "一般(Standard)" 工具列設定一個按鈕的增益集, 這個按鈕會執行NewBlankSlide。 手續有一點點複雜: 1)將巨集的 "安全性" 設為 "中" 2) 建立一個新簡報檔 (開新檔案) 3) 按 Alt+F11, 進入 PowerPoint 的 Visiual Basic 編輯環境, 點選 [插入]-->模組 4)copy底下的程式碼, 把它貼到模組程式碼視窗裡: Sub NewBlankSlide() NewSlideNo = ActivePresentation.Slides.Count + 1 ActivePresentation.Slides.Add(Index:=NewSlideNo, Layout:=ppLayoutBlank).Select End Sub Sub auto_open() '當這個檔案被開啟的時候, 也就是這個增益集被啟動的時候, 就要新增這個按鈕 Set myControl = CommandBars.FindControl(Type:=msoControlButton, Tag:="NEWBLANKSLIDE") If myControl Is Nothing Then Set myControl = CommandBars.FindControl(Type:=msoControlButton, Id:=680) myControl.CopyFace Set newItem = Application.CommandBars("Standard").Controls.Add( _ Type:=msoControlButton, Before:=1) With newItem .BeginGroup = True .Caption = "空白投影片" .Tag = "NEWBLANKSLIDE" .FaceId = 0 .OnAction = "NewBlankSlide" .PasteFace End With End If End Sub Sub auto_close() '當這個檔案被關閉的時候, 也就是這個增益集被移除的時候, 就把這個按鈕刪掉 Set myControl = CommandBars.FindControl(Type:=msoControlButton, Tag:="NEWBLANKSLIDE") If myControl Is Nothing Then Else myControl.DeleteEnd If End Sub 5)回到PowerPoint 投影片編輯視窗, 執行[檔案]-->另存新檔, 選擇 [檔案類型] 為: "PowerPoint增益功能(*.ppa)" , 請給這檔案取個名字叫做"新增空白投影片", Powerpoint 會把這個檔案存到 C:\Documents and Settings\<使用者名稱>\Application Data\Microsoft\Add-Ins 資料夾 6)執行[工具]-->[增益集], 在 "增益集" 功能視窗裡按 [新增] 鈕, 然後點選你剛才存檔的 "新增空白投影片.ppa" 檔, 最後把"增益集" 功能視窗關掉 7) 檢查 Powerpoint 的 "一般" 工具列的第一個按鈕, 是不是叫做"空白投影片"? 試試看它的功能吧!! 上述手續只需做一次, 從此之後, 啟動 Powerpoint 裡面就會有此按鈕 , 而因為auto_open()程式裡面有檢查, If myControl Is Nothing Then ......, 如果按鈕不存在才會新增, 所以不會重覆。 |
|
( 知識學習|科學百科 ) |