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. Office関連

    [Office 365 Solo]日本語環境以外では使えるの?

    Office 365 Soloを使ってみて、疑問に思ったことの一つが“…

  2. Office関連

    Excel Services JavaScript APIを試してみました(1)

    前回の記事で紹介した「ExcelMashup.com」、このサイトによ…

  3. リボン関連

    Office XP Developer Toolsでリボン対応のCOMアドインを作成する。

    「Visual Basic 6でリボン対応のアドインを作成する」ではV…

  4. Office関連

    Microsoft Edgeを操作するVBAマクロ(WebDriver編)

    Microsoft Edge Dev Blogに「Bringing a…

  5. Office関連

    「傍点をふる」をWord 2007/2010で簡単に使う方法

    Wordで文字列を強調したいときに便利なのが「傍点をふる」コマンド。…

  6. Office関連

    【2017年1月版】Microsoft Edgeを操作するVBAマクロ(DOM編)

    「Microsoft Edge VBA 操作」こういったキーワード検索…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP