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

    「2014年12月のWindows Update以降コマンドボタンが使えなくなった」トラブルへのFi…

    当ブログでも「KB2553154の更新プログラムをアンインストールする…

  2. Excel

    「データ追跡機能付きテンプレート ウィザード」のダウンロード先

    ※ 下記に紹介する方法はOfficeのサービスパックからデータ追跡機能…

  3. Office関連

    【2018年7月版】ソースコードを番号行付きのテーブルに変換するWordマクロ

    6年以上前、Wordに貼り付けたソースコードを番号付きのテーブルに変換…

  4. Office アドイン

    [Office用アプリ]IMG Effector

    IMG Effectorはドキュメント上のイメージに15種類以上のエフ…

  5. Office関連

    マクロに割り当てたショートカットキーをCSVファイルとして出力するWordマクロ

    Word MVPの新田さんが書かれた以下の記事を見て思いついたマクロで…

  6. Office関連

    Visual Studio Community 2015でOffice開発する。

    「Microsoft、統合開発環境「Visual Studio 201…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP