Office関連

[PowerPoint]Applicationオブジェクトのイベントを利用する

PowerPointのApplicationオブジェクトには、スライドショーが開始されたときに発生する「SlideShowBegin」やスライドショーが終了したときに発生する「SlideShowEnd」等のイベントが用意されています。

それらのイベントを利用したマクロを書く方法は「PPT2000 アプリケーション レベルのイベント ハンドラーを作成する方法」に書かれている通りで、「WithEvents」キーワードを使用します。

・クラスモジュール(名前:Class1)

Option Explicit

Public WithEvents App As PowerPoint.Application

Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
'※ 図形やスライド上で右クリックしたときに発生するイベント
  Cancel = True
  MsgBox "WindowBeforeRightClick"
End Sub

クラスモジュール(名前:Class1)を挿入して上記コードを、標準モジュールを挿入して下記コードを貼り付けた後、「Sample」プロシージャを実行すると、

・標準モジュール

Option Explicit

Private cls As Class1

Public Sub Sample()
  Set cls = New Class1
  Set cls.App = Application
End Sub

下図のように図形やスライド上で右クリックしたときにWindowBeforeRightClickイベントが発生し、メッセージボックスが表示されます。

スライドショー実行時に何かマクロを実行したい、といった場合には必要なテクニックとなりますので、覚えておいて損は無いだろうと思います。

また、標準モジュールとクラスモジュールの両方が必要になるので何となく面倒くさい!という方には下記の方法がお薦めです。

開発」タブから「コマンド ボタン (ActiveX コントロール)」(他のコントロールでも可)を挿入すると(2007以降の場合)、VBAProjectに「Slide1」モジュール(Microsoft PowerPoint Objects以下)が自動的に挿入されます(挿入後はコントロールを削除しても構いません)。

この「Slide1」はExcelでいうところの「Sheet1」のようなもので、この中でWithEventsキーワードを使用することができます(クラスモジュールなので)。
そのため、上で挙げたように標準モジュールを使用する必要が無く、下記のようにSlide1.Sampleプロシージャを呼び出せば、Applicationオブジェクトのイベントを利用することができます。

・Slide1モジュール

Option Explicit

Private WithEvents App As PowerPoint.Application

Public Sub Sample()
  Set App = Application
End Sub

Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
  Cancel = True
  MsgBox "WindowBeforeRightClick"
End Sub

さらに、前回の記事で紹介したcustomUI要素のonLoad属性のコールバックを利用すると、ドキュメントを開いたときからApplicationオブジェクトのイベントを利用することができるようになります。

・XML

<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="Slide1.Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui" />

・Slide1モジュール

Option Explicit

Private WithEvents App As PowerPoint.Application

Public Sub Ribbon_onLoad(ribbon As IRibbonUI)
  Set App = Application
End Sub

Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
  Cancel = True
  MsgBox "WindowBeforeRightClick"
End Sub

モジュールを一つにまとめたい場合には有効な方法だと思いますので、興味がある方は是非お試しください。

コメント

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP