Article ID: 308330
Article Last Modified on 1/30/2007
APPLIES TO
- Microsoft PowerPoint 2002 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
This article was previously published under Q308330
For a Microsoft Visual C# .NET version of this article, see 308825.
For a Microsoft Visual C++ .NET version of this article, see 309309.
SUMMARY
This article describes how to handle Microsoft PowerPoint 2002 events by using Microsoft Visual Basic .NET 2002.
MORE INFORMATION
With Microsoft Visual Studio .NET, you cannot use delegates to sink events with PowerPoint. PowerPoint uses the IDispatch interface to fire events. To correctly sink the events, the Visual Basic .NET application must use the IConnectionPointContainer and IConnectionPoint interfaces. The receiving application must also know the DISPIDs of the events to sink. These DISPIDs are not listed in PowerPoint's type library, but are listed in the sample code below for reference.
Create the Sample Visual Basic .NET Automation Client
- Start Microsoft Visual Studio .NET. On the File menu, click New and then click Project. Under Project types click Visual Basic Projects, then click Windows Application under Templates. Form1 is created by default.
- Add a reference to the Microsoft PowerPoint Object Library. To do this, follow these steps:
- On the Project menu, click Add Reference.
- On the COM tab, locate Microsoft PowerPoint 10.0 Object Library, and then click Select.NOTE: If you have not already done so, it is recommended that you download, and then install the Microsoft Office XP Primary Interop Assemblies (PIAs). For additional information about Office XP PIAs, click the article number below to view the article in the Microsoft Knowledge Base:
328912 INFO: Microsoft Office XP PIAs Are Available for Download
- Click OK in the Add References dialog box to accept your selection. If you receive a prompt to generate wrappers for the libraries you selected, click Yes.
- On the View menu, click Toolbox to display the Toolbox and add two buttons and a list box to Form1.
- In sequence, double-click Button1, Button2, and Form1.
In the code window, replace the following code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub
with:
Private m_oConnectionPoint As UCOMIConnectionPoint Private m_Cookie As Integer Private oPPT As PowerPoint.Application Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Create a new instance of PowerPoint. oPPT = New PowerPoint.Application() ' Show PowerPoint to the user. oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Call Unadvise to remove the sink to the connection. m_oConnectionPoint.Unadvise(m_Cookie) System.Runtime.InteropServices.Marshal.ReleaseComObject(oPPT) GC.Collect() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oConnPointContainer As UCOMIConnectionPointContainer ' QI for IConnectionPointContainer. oConnPointContainer = CType(oPPT, UCOMIConnectionPointContainer) ' Create a new variable that contains the GUID of the ' PowerPoint.EApplication interface. Dim guid As New Guid("914934C2-5A91-11CF-8700-00AA0060263B") ' Find the connection point. oConnPointContainer.FindConnectionPoint(guid, m_oConnectionPoint) ' Call Advise to sink up the connection. m_oConnectionPoint.Advise(Me, m_Cookie) End Sub <DispId(2001)> Public Sub WindowSelectionChange(ByVal Sel As PowerPoint.Selection) Me.ListBox1.Items.Add("WindowSelectionChange") End Sub <DispId(2002)> Public Sub WindowBeforeRightClick(ByVal Sel As PowerPoint.Selection, ByVal Cancel As Boolean) Me.ListBox1.Items.Add("WindowBeforeRightClick") End Sub <DispId(2003)> Public Sub WindowBeforeDoubleClick(ByVal Sel As PowerPoint.Selection, ByVal Cancel As Boolean) Me.ListBox1.Items.Add("WindowBeforeDoubleClick") End Sub <DispId(2004)> Public Sub PresentationClose(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("PresentationClose") End Sub <DispId(2005)> Public Sub PresentationSave(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("PresentationSave") End Sub <DispId(2006)> Public Sub PresentationOpen(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("PresentationOpen") End Sub <DispId(2007)> Public Sub NewPresentation(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("NewPresentation") End Sub <DispId(2008)> Public Sub PresentationNewSlide(ByVal Sld As PowerPoint.Slide) Me.ListBox1.Items.Add("PresentationNewSlide") End Sub <DispId(2009)> Public Sub WindowActivate(ByVal Pres As PowerPoint.Presentation, ByVal Wn As PowerPoint.DocumentWindow) Me.ListBox1.Items.Add("WindowActivate") End Sub <DispId(2010)> Public Sub WindowDeactivate(ByVal Pres As PowerPoint.Presentation, ByVal Wn As PowerPoint.DocumentWindow) Me.ListBox1.Items.Add("WindowDeactivate") End Sub <DispId(2011)> Public Sub SlideShowBegin(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add("SlideShowBegin") End Sub <DispId(2012)> Public Sub SlideShowNextBuild(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add("SlideShowNextBuild") End Sub <DispId(2013)> Public Sub SlideShowNextSlide(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add("SlideShowNextSlide") End Sub <DispId(2014)> Public Sub SlideShowEnd(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("SlideShowEnd") End Sub <DispId(2015)> Public Sub PresentationPrint(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add("PresentationPrint") End Sub <DispId(2016)> Public Sub SlideSelectionChanged(ByVal SldRange As PowerPoint.SlideRange) Me.ListBox1.Items.Add("SlideSelectionChanged") End Sub <DispId(2017)> Public Sub ColorSchemeChanged(ByVal SldRange As PowerPoint.SlideRange) Me.ListBox1.Items.Add("ColorSchemeChanged") End Sub <DispId(2018)> Public Sub PresentationBeforeSave(ByVal Pres As PowerPoint.Presentation, ByVal Cancel As Boolean) Me.ListBox1.Items.Add("PresentationBeforeSave") End Sub <DispId(2019)> Public Sub SlideShowNextClick(ByVal Wn As PowerPoint.SlideShowWindow, ByVal nEffect As PowerPoint.Effect) Me.ListBox1.Items.Add("SlideShowNextClick") End Sub
Add the following to the Imports section at the top of the code window:
Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop
- Test the program. To do this, follow these steps:
- Press F5 to build and run the program. PowerPoint is started.
- Click Button1 to set up the event sinks.
- Create a new presentation in PowerPoint.
The WindowActivate, NewPresentation, PresentationNewSlide and WindowSelectionChange events fire. - Save the presentation.
The PresentationSave event fires. - Close the presentation.
The PresentationClose event fires. - Activate Form1 in the program. The events that were triggered by PowerPoint and handled by the program appear in the list box.
- Click Button2 to disconnect the event sinks.
- Close Form1.
REFERENCES
For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
254009 INFO: PowerPoint 2000 Event Demonstration Available for Download
For more information on Office Automation, see the following Microsoft Office Development support site:
FAQs and Highlights for Office Development
http://support.microsoft.com/ofd
Additional query words: powerpoint vb net event power point connection
Keywords: kbautomation kbhowto KB308330