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

文書翻訳 文書翻訳
文書番号: 308330 - 対象製品
この記事は、以前は次の 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.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 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 を自動化した場合にのみ発生します。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (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) をもとに作成したものです。

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

プロパティ

文書番号: 308330 - 最終更新日: 2014年2月6日 - リビジョン: 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
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

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