PowerPointは、商品のプレゼンだけでなく、様々な研修会などでも利用されています。また、自分の場合、デジタルサイネージの土台としても使っており、さらにはウェブページのパーツを作るときにもPowerPointの恩恵を得られます。さて、そんなPowerPointですが、研修時に別にタイマーアプリが必要であったり、プレゼンの流れで見せたいときに、普通のWindowsのアプリですと、余計な機能や見てくれが派手などで使い勝手の良いタイマーがなかなかありません(勝手にアプリ入れられないというセキュリティ上の制限もあったり)

ということで、作ったのがVBAだけで作成したPowerPoint上で使えるタイマーです。既存のPowerPointにも組み込めますが、その場合Shapeの名前が異なるのでそこだけは修正が必要です。

図:シンプルで既存のプレゼンファイルにも組み込めます。

今回使用するファイル

ソースコード

リボンのXMLコード

今回のプレゼンタイマーは、PowerPointファイルにVBAを仕込んで、そのコマンドをリボンから実行できるようにしています。タイマーを実行すると、プレゼンも開始されるようになっています。ただし、タイマーはストップを押さない限り、プレゼン解除しても走り続けます。リボンは、Custom UI Ribbon Editorを使って、書いています。

起動時には、Excelなどの時と同じように、onLoadで指定した関数が実行されTimerというタブがアクティブになります。それぞれのボタンにはonActionで指定した関数が紐付けられています。

タイマー開始

  • タイマー実行開始とともにプレゼンテーションもApplication.ActivePresentation.SlideShowSettings.Runにて自動実行されます。
  • timer_countdown()では、実行中は常にstopflagを監視し、trueになったらプログラムが停止するようになっています。
  • 指定したタイマー(分)をもとに、Shapesの中の値を書き換えています。0になったらプログラムが停止するようになっています。
  • PowerPointの場合、作成したテキストボックスなどのShapeはコントロール名がわからないので、以下のコマンドでどういう名前が付けられているかをチェックするとよいでしょう(TextBox 126というのがその名前。これが作成時にしかわからない。

  • Shapeを選んでからこのコマンドを実行すると、イミディエイトに名前、ID、タイプが表示されます。

タイマーを停止させる場合

タイマーは指定時間内ずっと、VBAが動き続けている状況になります。通常、ExcelなどではCtrl + Breakキーを押すことで、実行中のVBAについて停止が掛けられます。しかしこれはショートカットキーを知らないと使えませんし、スマートじゃありません。そこで今回はフラグを使って、自然にすぐ止まるように組んであげます。

ポイントは、Endステートメントで強制終了するのではなく、stopflag = trueにし、タイマープログラム側のループをflagを読み取って自然に終了させる点にあります。

Endステートメントの場合

タイマー停止機能に於いて、プロシージャでよくVBAの処理を中止する方法として「Endステートメント」を使う事例がありますが、Office365にて確認してみた所、「セキュリティが・・・」といったエラーメッセージが表示されます。プログラムは停止されますが、このエラーメッセージはApplication.DisplayAlerts = ppAlertsNoneといったコードを追記しても表示されてしまうので、ストップさせる場合には、Endステートメントは避けたほうが良いでしょう。

図:マクロセキュリティ低でも出てきますよ

関連リンク

共有してみる: