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
モジュールを一つにまとめたい場合には有効な方法だと思いますので、興味がある方は是非お試しください。
この記事へのコメントはありません。