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 アドイン

    [Office用アプリ]ユーザー設定を保存する。

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

  2. Office関連

    Office製品の開発者用リファレンス(ダウンロード版)

    Docs.comでまとめていたリンクなんですが、来月15日にすべて廃止…

  3. Office関連

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

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

  4. Excel

    住所から郵便番号を取得するVBAマクロ

    「住所から郵便番号 VBA」といったキーワード検索でのアクセスがあった…

  5. Office関連

    Word 2013のアクセス キー一覧[PDF]

    前回の記事でWord 2013のアクセス キーをまとめたものを公開しま…

  6. アイコン一覧

    Office 2013 アイコン一覧(U)

    ・Office 2013 アイコン一覧 NUM…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP