如何使用 Visual Basic .NET 2003 處理 Office PowerPoint 2003 事件

文章翻譯 文章翻譯
文章編號: 824021 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

簡介

本文將告訴您,如何利用以 Microsoft Visual Basic .NET 2003 所開發的 Automation 用戶端來處理 Microsoft Office PowerPoint 2003 事件 。

建構事件處理常式

您可以使用下列其中一種方法利用 Visual Basic .NET 建構事件處理常式。請根據您想要如何建立事件處理常式和事件之間的關聯,選擇一種方法 。
  • 方法 1

    通常,您是使用 Handles 關鍵字搭配 WithEvents 關鍵字來建立事件處理常式。當您利用 WithEvents 關鍵字宣告物件參考變數時,Visual Basic .NET 會自動在執行階段連接到該物件的事件。如果要處理物件的某特定事件, 請在程式碼檢視狀態時,使用 Visual Studio .NET 環境中的 Class 清單與 Method 清單加入相關處理常式 。
  • 方法 2

    Visual Basic .NET 提供另一種處理事件的方式。您可以使用 AddHandler 陳述式與 RemoveHandler 陳述式,這樣就可以動態地開始和動態地停止特定事件的事件處理。

    注意 如果您使用 WithEvents 關鍵字建構事件處理常式,可能會收到 System.Reflection.TargetInvocationException 例外狀況。因此,請使用 AddHandler 事件建構事件處理常式。

建立處理 PowerPoint 事件的 Visual Basic .NET Automation 用戶端

下列幾組步驟將示範如何從利用 Visual Basic .NET 所開發的 Automation 用戶端,以 AddHandler 陳述式處理 PowerPoint 應用程式事件 。

如果要建立 Visual Basic .NET 專案,請依照下列步驟執行:
  1. 啟動 Microsoft Visual Studio .NET 2003。
  2. [檔案] 功能表中,按一下 [新增],再按一下 [專案]
  3. 按一下 [專案類型] 清單中的 [Visual Basic 專案]。在 [範本] 清單中,按一下 [Windows 應用程式]
  4. 將專案命名為 PowerPointEvents,然後按一下 [確定]

    根據預設,會建立名為 Form1 的表單。
如果要加入 Microsoft PowerPoint Object Library 和 Microsoft Graph Object Library 的參考,請依照下列步驟執行:
  1. [專案] 功能表上,按一下 [加入參考]
  2. [COM] 索引標籤上,按一下 [Microsoft PowerPoint 11.0 Object Library],然後按一下 [選取]
  3. [COM] 索引標籤上,按一下 [Microsoft Graph 11.0 Object Library],然後按一下 [選取]
  4. [加入參考] 對話方塊中,按一下 [確定] 以接受您的選取。
  5. 按兩下表單。

    [程式碼] 視窗就會開啟。
  6. 在 Form1.vb 檔案的頂端,加入下列程式碼:
     Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
    	Imports Office = Microsoft.Office.Core
    	Imports Graph = Microsoft.Office.Interop.Graph
    
  7. 按一下 [檢視] 功能表上的 [設計工具]
  8. [檢視] 功能表上,按一下 [工具箱],然後在 Form1 上加入一個按鈕。
  9. 按兩下 [Button1]

    [程式碼] 視窗會在 Button1_Click 事件的地方開啟。
  10. 在 [程式碼] 視窗中,將下列程式碼放在 Button1_Click 事件的前面:
    	Dim oApp As PowerPoint.Application
    	Dim oPres As PowerPoint.Presentation
    
  11. 將下列程式碼加入至 Button1_Click 事件:
    	Const sTemplate = "C:\Program Files\Microsoft Office\Templates\Presentation Designs\Orbit.pot"
    ' 如果先前的範本無法使用,將範本名稱改成存在於系統上的範本名稱。
    Const sVideo = "C:\WINDOWS\system32\oobe\images\intro.wmv"
    
    Dim oPresentations As PowerPoint.Presentations
    Dim oSlides As PowerPoint.Slides
    Dim oSlide As PowerPoint.Slide
    Dim oShapes As PowerPoint.Shapes
    Dim oShape As PowerPoint.Shape
    Dim oMovie As PowerPoint.Shape
    Dim oAnimationSettings As PowerPoint.AnimationSettings
    Dim oPlaySettings As PowerPoint.PlaySettings
    Dim oTextFrame As PowerPoint.TextFrame
    Dim oTextRange As PowerPoint.TextRange
    Dim oFont As PowerPoint.Font
    Dim oOLEFormat As PowerPoint.OLEFormat
    Dim oShadow As PowerPoint.ShadowFormat
    Dim oForeColor As PowerPoint.ColorFormat
    Dim oRange As PowerPoint.SlideRange
    Dim oSlideShowTransition As PowerPoint.SlideShowTransition
    
    '啟動 PowerPoint 然後將 PowerPoint 視窗設為可見但最小化。
    oApp = New PowerPoint.Application
    
    '加入事件處理常式。
    AddHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
    AddHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
    AddHandler oApp.PresentationClose, AddressOf oApp_PresentationClose
    
    oApp.Visible = True
    oApp.WindowState = PowerPoint.PpWindowState.ppWindowMinimized
    
    '依據指定的範本建立新的簡報。
    oPresentations = oApp.Presentations
    oPres = oPresentations.Open(sTemplate, , , True)
    
    '建立第 1 張投影片。
    '將文字加入至投影片、變更字型,然後在第 1 張投影片上
    '插入或放置影片。
    oSlides = oPres.Slides
    oSlide = oSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
    oShapes = oSlide.Shapes
    oShape = oShapes.Item(1)
    oTextFrame = oShape.TextFrame
    oTextRange = oTextFrame.TextRange
    oTextRange.Text = "My sample presentation"
    oFont = oTextRange.Font
    oFont.Name = "Comic Sans MS"
    oFont.Size = 48
    
    oMovie = oShapes.AddMediaObject(sVideo, 150, 150, 500, 350)
    oAnimationSettings = oMovie.AnimationSettings
    oPlaySettings = oAnimationSettings.PlaySettings
    oPlaySettings.PlayOnEntry = True
    oPlaySettings.HideWhileNotPlaying = True
    
    ''NAR 以釋放參考。
    NAR(oPlaySettings)
    NAR(oAnimationSettings)
    NAR(oMovie)
    NAR(oFont)
    NAR(oTextRange)
    NAR(oTextFrame)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)
    
    '建立第 2 張投影片。
    '在投影片標題中加入文字,然後設定文字的格式。此外,在投影片中加入圖表,
    '然後將圖表類型改成立體直條圖群組。
    oSlides = oPres.Slides
    oSlide = oSlides.Add(2, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
    oShapes = oSlide.Shapes
    oShape = oShapes.Item(1)
    oTextFrame = oShape.TextFrame
    oTextRange = oTextFrame.TextRange
    oTextRange.Text = "My chart"
    oFont = oTextRange.Font
    oFont.Name = "Comic Sans MS"
    oFont.Size = 48
    
    Dim oChart As Graph.Chart
    oShape = oShapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart.8")
    oOLEFormat = oShape.OLEFormat
    oChart = oOLEFormat.Object
    oChart.ChartType = Graph.XlChartType.xl3DColumnClustered
    
    ''NAR 以釋放參考。
    NAR(oChart)
    NAR(oOLEFormat)
    NAR(oFont)
    NAR(oTextRange)
    NAR(oTextFrame)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)
    
    
    '建立第 3 張投影片。
    '在投影片中加入文字效果,然後將陰影套用至文字效果。
    oSlides = oPres.Slides
    oSlide = oSlides.Add(3, PowerPoint.PpSlideLayout.ppLayoutBlank)
    oSlide.FollowMasterBackground = False
    oShapes = oSlide.Shapes
    oShape = oShapes.AddTextEffect(Office.MsoPresetTextEffect.msoTextEffect27, _
    "The End", "Impact", 96, False, False, 230, 200)
    
    oShadow = oShape.Shadow
    oForeColor = oShadow.ForeColor
    oForeColor.SchemeColor = PowerPoint.PpColorSchemeIndex.ppForeground
    oShadow.Visible = True
    oShadow.OffsetX = 3
    oShadow.OffsetY = 3
    
    ''NAR 以釋放參考。
    NAR(oShadow)
    NAR(oForeColor)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)
    
    
    '修改簡報中這三張投影片的
    '投影片放映切換設定。
    Dim SlideIdx(3) As Integer
    SlideIdx(0) = 1
    SlideIdx(1) = 2
    SlideIdx(2) = 3
    
    oSlides = oPres.Slides
    oRange = oSlides.Range(SlideIdx)
    oSlideShowTransition = oRange.SlideShowTransition
    oSlideShowTransition.AdvanceOnTime = False
    oSlideShowTransition.EntryEffect = PowerPoint.PpEntryEffect.ppEffectBoxOut
    
    
    '以個別方法執行投影片放映。
    RunSlideShow()
    
    ''NAR 以釋放參考。
    NAR(oSlideShowTransition)
    NAR(oRange)
    NAR(oSlides)
    
    '關閉簡報但不儲存變更,然後結束 PowerPoint。
    oPres.Saved = True
    oPres.Close()
    
    'NAR 處理簡報物件。
    NAR(oPres)
    NAR(oPresentations)
    
    '移除所有事件處理常式。
    RemoveHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
    RemoveHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
    RemoveHandler oApp.PresentationClose, AddressOf oApp_PresentationClose
    
    '結束 PowerPoint。
    oApp.Quit()
    NAR(oApp)
    
    GC.Collect()
    
  12. 在 [程式碼] 視窗中,將下列程式碼放在 Button1_Click 事件下方:
    	Private Sub RunSlideShow()
    Dim oSettings As PowerPoint.SlideShowSettings
    	    Dim oSlideShowWindows As PowerPoint.SlideShowWindows
    
    	    oSettings = oPres.SlideShowSettings
    	    oSettings.StartingSlide = 1
    	    oSettings.EndingSlide = 3
    
    '執行投影片放映。等候投影片放映完成。
    oSettings.Run()
    
    oSlideShowWindows = oApp.SlideShowWindows
    
    On Error Resume Next
    Do While oSlideShowWindows.Count >= 1
    	        System.Windows.Forms.Application.DoEvents()
    	    Loop
    
    	    NAR(oSlideShowWindows)
    NAR(oSettings)
    	End Sub
    
    	'NAR 函式以移除參考。
    	Private Sub NAR(ByVal o As Object)
    Try
    	        System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
    Catch
    Finally
    o = Nothing
    End Try
    	End Sub
    
  13. 將下列事件處理常式加入至前述程式碼的下方:
    	'事件處理常式
    
    	Private Sub oApp_SlideShowBegin(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
    '變更投影片放映視窗的位置和大小。
    Dim oView As PowerPoint.SlideShowView
    
    With Wn
    .Height = 325
    .Width = 400
    .Left = 100
    .Activate()
    End With
    
    '啟動第 1 張投影片上的影片。
    oView = Wn.View
    oView.Next()
    
    NAR(oView)
    NAR(Wn)
    	End Sub
    
    	Private Sub oApp_SlideShowNextSlide(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
    '依據投影片變更指標的顏色和類型。
    Dim Showpos As Integer
    Dim oView As PowerPoint.SlideShowView
    Dim oColorFormat As PowerPoint.ColorFormat
    
    oView = Wn.View
    Showpos = oView.CurrentShowPosition + 1
    
    If Showpos = 3 Then
    oColorFormat = oView.PointerColor
    oColorFormat.RGB = RGB(255, 0, 0)
    oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerPen
    Else
    oColorFormat = oView.PointerColor
    oColorFormat.RGB = RGB(0, 0, 0)
    oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerArrow
    End If
    
    NAR(oColorFormat)
    NAR(oView)
    NAR(Wn)
    	End Sub
    
    	Private Sub oApp_PresentationClose(ByVal Pres As Microsoft.Office.Interop.PowerPoint.Presentation)
    '在關閉簡報之前,先將簡報另存為 HTML。
    Pres.SaveAs("C:\TestEvents.htm", PowerPoint.PpSaveAsFileType.ppSaveAsHTML)
    NAR(Pres)
    	End Sub
    

試試看

  1. 按 F5 以執行此應用程式。
  2. 按一下 [Button1]

    PowerPoint 會開始放映投影片。請注意下列資訊:
    • 第 1 張投影片會開始播放影片。
    • 指標類型會變更。
    • 含有圖表的第 2 張投影片上的顏色會變更。
  3. 關閉簡報。

?考

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
308330 How to handle PowerPoint 2002 events by using Visual Basic .NET 2002
254009 INFO: PowerPoint 2000 Event Demonstration Available for Download
303717 如何透過 Visual Basic .NET 2002 或 Visual Basic .NET 2003,使用自動化功能來建立及顯示 PowerPoint 2002 簡報或 Office PowerPoint 2003 簡報
823996 PRB: PIA Is Not Found When You Reference an Office Type Library in Visual Studio .NET

屬性

文章編號: 824021 - 上次校閱: 2005年12月14日 - 版次: 1.1
這篇文章中的資訊適用於:
  • Microsoft Office PowerPoint 2003
  • Microsoft Visual Basic .NET 2003 Standard Edition
關鍵字:?
kbhowtomaster kbautomation KB824021
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com