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

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

[PowerPoint]ドキュメントを開いたときに自動的にマクロを実行する前のページ

Adobe Readerを利用してPDFファイルのページ数を取得するVBAマクロ次のページ

関連記事

  1. Office関連

    各スライドに配置されたオートシェイプからテキストを取得するPowerPointマクロ

    各スライドに配置されたオートシェイプからテキストを抜き出す処理を考えて…

  2. Office関連

    Gmail APIを使ってメール送信するVBAマクロ

    「「Gmail API」β版公開、連動アプリ開発を支援」にもあるように…

  3. Office関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  4. Office関連

    Word 2013では右クリックからBing検索できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  5. Office関連

    PDFを他のファイル形式に変換するVBAマクロ

    「PDF 変換 Word VBA」といったキーワード検索でのアクセスが…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP