HOWTO: 用 Visual Basic .NET 处理 PowerPoint 事件

文章翻译 文章翻译
文章编号: 308330 - 查看本文应用于的产品
本文的发布号曾为 CHS308330
本文已归档。它按“原样”提供,并且不再更新。
有关本文的 Microsoft Visual C# .NET 版本,请参见 308825
有关本文的 Microsoft Visual C++ .NET 版本,请参见 309309
展开全部 | 关闭全部

概要

本文演示如何使用 Visual Basic .NET 实现 PowerPoint 的自动操作并处理事件。

更多信息

在 Microsoft Visual Studio .NET 中,无法使用委托接收 PowerPoint 事件。 PowerPoint 使用 IDispatch 接口来引发事件。 若要正确地接收事件,Visual Basic .NET 应用程序必须使用 IConnectionPointContainer IConnectionPoint 接口。 接收应用程序还必须知道要接收的事件的 DISPID。 这些 DISPID 未在 PowerPoint 的类型库中列出,但是列在下面的示例代码中以便参考。

创建示例 Visual Basic .NET 自动化客户端

  1. 启动 Microsoft Visual Studio .NET。在文件菜单上,单击新建,然后单击项目。在项目类型下单击 Visual Basic 项目,然后单击模板下的 Windows 应用程序。默认情况下会创建 Form1。
  2. 添加一个对 Microsoft PowerPoint Object Library 的引用。为此,请按照下列步骤操作:
    1. 项目菜单上,单击添加引用
    2. COM 选项卡上,找到 Microsoft PowerPoint Object Library ,然后单击选择

      备注:PowerPoint Object Library 中包含一个版本号;PowerPoint 2000 的版本是 9.0,PowerPoint 2002 的版本是 10.0。
    3. 添加引用对话框中单击确定以接受您的选择。如果提示您为选定的库生成包装,请单击
  3. 视图菜单上,单击工具箱以显示“工具箱”,并向 Form1 中添加两个按钮和一个列表框。
  4. 依次双击 Button1Button2 Form1
  5. 在代码窗口中,将以下代码
    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
    替换为:
    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.
        'POWERPOINT9
        oPPT.Visible = Office.MsoTriState.msoTrue
        'POWERPOINT10
        '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
    
    'BEGIN POWERPOINT10
    '<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
    'END POWERPOINT10
    备注:如所编写的那样,此代码使用 PowerPoint 9.0 对象库。 在向您的项目中添加引用时,如果您选择的是 PowerPoint 10.0 对象库而非 PowerPoint 9.0 对象库,则在该代码中搜索包含“POWERPOINT10”的注释,并将该注释引用的一行或多行代码取消注释。 同样,在该代码中搜索包含“POWERPOINT9”的注释并注释掉该注释引用的一行或多行代码。

  6. 替换为: 将以下代码添加到代码窗口顶部的 Imports 部分:
    Imports System.Runtime.InteropServices
  7. 替换为: 测试该程序。为此,请按照下列步骤操作:
    1. 按 F5 键以生成并运行该程序。 将启动 PowerPoint。
    2. 单击 Button1 以设置事件接收。
    3. 在 PowerPoint 中新建一个演示文稿。

      将引发 WindowActivateNewPresentationPresentationNewSlide WindowSelectionChange 事件。
    4. 保存该演示文稿。

      将引发 PresentationSave 事件。
    5. 关闭该演示文稿。

      将引发 PresentationClose 事件。
    6. 在程序中激活 Form1。 由 PowerPoint 触发并由该程序处理的事件将显示在列表框中。
    7. 单击 Button2 以断开事件接收。
    8. 关闭 Form1
以下 PowerPoint Application 事件是 PowerPoint 2002 中的新添事件,它们只在实现 PowerPoint 2002 自动操作时才引发:

参考

有关其他信息,请单击下列文章编号,查看相应的 Microsoft 知识库文章:
254009 INFO: PowerPoint 2000 Event Demonstration Available for Download(用于下载的 PowerPoint 2000 事件演示)
有关 Office 自动化的更多信息,请参见以下 Microsoft Office 开发支持站点:
Office 开发常见问题解答和重点
http://support.microsoft.com/ofd

属性

文章编号: 308330 - 最后修改: 2013年10月24日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft Visual .NET 2002 标准版
  • Microsoft PowerPoint 2000 标准版
  • Microsoft PowerPoint 2002 标准版
关键字:?
kbnosurvey kbarchive kbhowto kbautomation _ik11561 kbgrpdso KB308330
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