[HOWTO] Visual Basic .NET で PowerPoint のイベントを処理する方法

この記事は、以前は次の ID で公開されていました: JP308330
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
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. [参照の追加] ダイアログ ボックスで [OK] をクリックし、選択を決定します。選択したライブラリのラッパーを生成するかどうかの確認が表示されたら、[はい] をクリックします。
  3. [表示] メニューの [ツールボックス] をクリックしてツールボックスを表示し、Form1 に 2 つのボタンと 1 つのリスト ボックスを追加します。
  4. [Button1]、[Button2]、および [Form1] を順番にダブルクリックします。
  5. コード ウィンドウには、次のコードが表示されます。
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickEnd SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickEnd SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadEnd Sub
    これを次のコードで置き換えてください。
    Private m_oConnectionPoint As UCOMIConnectionPointPrivate m_Cookie As IntegerPrivate oPPT As PowerPoint.ApplicationPrivate 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.'POWERPOINT9oPPT.Visible = Office.MsoTriState.msoTrue'POWERPOINT10'oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrueEnd SubPrivate 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 SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim 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 Object Library が使用されています。プロジェクトへの参照の追加時に PowerPoint 9.0 Object Library ではなく PowerPoint 10.0 Object Library を選択した場合は、コードから "POWERPOINT10" を含むコメントを検索し、そのコメントに対応するコード行のコメントを外してください。同様に、コードから "'POWERPOINT9" を含むコメントを検索し、そのコメントに対応するコード行をコメント アウトしてください。

  6. コード ウィンドウの先頭に、次の Imports ステートメントを追加します。
    Imports System.Runtime.InteropServices
  7. 次の手順に従って、プログラムをテストします。
    1. a.F5 キーを押し、プログラムをビルドして実行します。PowerPoint が起動されます。
    2. b.[Button1] をクリックしてイベント シンクをセットアップします。
    3. c.PowerPoint で新しいプレゼンテーションを作成します。

      WindowActivate、NewPresentation、PresentationNewSlide、および WindowSelectionChange イベントが発生します。
    4. d.プレゼンテーションを保存します。

      PresentationSave イベントが発生します。
    5. e.プレゼンテーションを閉じます。

      PresentationClose イベントが発生します。
    6. f.プログラムの [Form1] をアクティブにします。リスト ボックスには、PowerPoint によって生成され、プログラムで処理されたイベントが表示されています。
    7. g.[Button2] をクリックしてイベント シンクを切断します。
    8. h.[Form1] を閉じます。
PowerPoint 2002 で新しく導入された PowerPoint アプリケーション イベントを以下に示します。これらのイベントは、PowerPoint 2002 を自動化した場合にのみ発生します。
DISPIDメソッド名
2016SlideSelectionChanged
2017ColorSchemeChanged
2018PresentationBeforeSave
2019SlideShowNextClick
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
254009 INFO: PowerPoint 2000 Event Demonstration Available for Download
Office オートメーションの詳細については、以下の Microsoft Office Development サポート サイトを参照してください。
Office 開発に関する FAQ およびハイライト
http://support.microsoft.com/ofd
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 308330 (最終更新日 2002-02-21) をもとに作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

powerpoint vb net event power point connection
プロパティ

文書番号:308330 - 最終更新日: 02/06/2014 18:13:04 - リビジョン: 6.0

  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • kbnosurvey kbarchive _ik11561 kbautomation kbgrpdso kbhowto KB308330
フィードバック