読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

Powerpoint VBA 付箋 アニメーション効果を設定する 

Powerpoint VBA

正規表現が読みたくてしょうがありませんが,さすがにパワーポイントのVBAから離れすぎているので,ネタを考えました。

そういえば,実務でよく付箋のようなアニメーション効果を使うのですが,けっこう設定が面倒です。

VBAで設定しようとすると,まったく思いつかない。

これは取り組む価値があるな,と思いやってみました。図形をがっつり動かすことしかやっていませんでしたので,アニメーション効果を扱うと新鮮です。

軌跡で動かすものとかも,考えてみれば軌跡を今なら制御できるんじゃないだろうか。。今度ネタにしてみようかな。。

さて,まず付箋のような効果というのが何を意味しているのかということですが,

パワーポイントでは,意図した順番でしか効果を設定できないと思われている場合もありますが,トリガー図形のクリックにより制御する場合があります。

マクロなど使わなくても,それによってかなり自由な表現が可能。わたしが主にやっていることと,完全に逆のことを言っていますが,もともと高性能なソフトウェアです。

各図形をクリックすると,その図形が消えるように設定すると,付箋のように見えるんですね。

そして,ある一つの図形をクリックすることで,消した付箋がもとに戻るように作ると,繰り返し取り組む教材が作れたりします。

このつくりを多用するんですが,けっこうコツが多くて大変な面があります。ですから,一つの方法として,マクロで自動設定することを今回書いてみます。

コードはこちら。標準モジュールです。

Option Explicit

Sub 付箋づくり()

    Dim AcShp As Shape
    Set AcShp = ActiveWindow.Selection.ShapeRange(1)
    Dim TargetSlide As Slide
    Set TargetSlide = ActivePresentation.Slides(AcShp.Parent.SlideIndex)

    TargetSlide.TimeLine.InteractiveSequences.Add
    
    Dim j As Long, s As Shape
    For Each s In TargetSlide.Shapes
        If Not (s Is AcShp) Then
            With TargetSlide.TimeLine.InteractiveSequences(1).AddEffect(s, msoAnimEffectWipe, , msoAnimTriggerOnShapeClick)
                .Exit = msoTrue
                .EffectParameters.Direction = msoAnimDirectionLeft
                .Timing.Duration = 0.1
            End With
        End If
    Next
    Dim flgFirst As Boolean: flgFirst = True
    For Each s In TargetSlide.Shapes
        If Not (s Is AcShp) Then
            With TargetSlide.TimeLine.InteractiveSequences(1).AddTriggerEffect(s, msoAnimEffectAppear, msoAnimTriggerOnShapeClick, AcShp)
                .Timing.Duration = 0.1
                If flgFirst = False Then .Timing.TriggerType = msoAnimTriggerWithPrevious
            End With
            flgFirst = False
        End If
    Next

End Sub


下記のような準備をまず行います。
f:id:chemiphys:20170226232134p:plain

アニメーションは未設置でお願いします。そのあたりとの兼ね合いは考えていません。
その他の図形も後で設置する感じがうれしいです。


付箋となる,長方形やメモのような図形を多数設置。数は適当でかまいません。
そして,元に戻すボタンを設置。これはスマイリーマークとか雷のマークをわたしは好んで使います。

これらを設置した後,元に戻すボタンになるものを選んでから,付箋づくりのマクロを実行してください。

元に戻すボタンを選んでいないと怒られます。ご注意ください。

f:id:chemiphys:20170226232556p:plain
アニメーションが無かったのに,マクロを動かすと多数設定されるのがわかると思います。

これでスライドショーを実行すると,
f:id:chemiphys:20170226232726g:plain

このように,クリックするとその長方形が消えます。スマイリーで復活できます。

教材には黄色とかのほうが,なんとなく便利ですが,色等いじればいろいろな可能性はあると思われます。

ひさびさにパワーポイントのマクロのお話でした。

さて,正規表現読まないと(;´▽`A``

ちなみに,この付箋と元に戻すボタンのセットを他のスライドにコピペしてもきちんと動きます。

他のアニメーションとかをちゃんと設定した後,付箋たちをまとめてコピペすると楽に運用が可能です。

付箋を減らす分には問題ないんですが,増やす場合は元に戻すボタンの設定がかなり面倒です。

このあたりは,もしやってみようかな,と思われた方は試行錯誤をしていただくしかありません。

私も慣れるまではめんどくさいーーとおもってましたので(;´▽`A``

コードの補足を続きに書きます。
アニメーションには,時系列で進んでいくものと,トリガー図形により時系列を無視して進んでいくものの二つがあるようです。

前者は MainSequence ,後者はInteractiveSequencesコレクションとなります。
今回は後者にアクセスしています。

各図形にそれぞれトリガーを別々に設置する場合はInteractiveSequenceオブジェクトのAddEffectメソッドを使います。
それに対して,複数の図形に単一のトリガーを設定する場合はInteractiveSequenceオブジェクトのAddTriggerEffectメソッドになります。

引数が似ていますが,若干異なりますので,上記コードを参考にされてください。

アニメーションは普通に設定すると,開始アニメーションとなるので, ExitプロパティにmsoTrueを入れると終了アニメーションになってくれます。
Durationプロパティは継続時間なのですが,一番最後に設定して上げないと,いちいち値がリセットされます。コードの順序に注意が必要です。

最後に,単一のトリガーで複数の図形を戻す,という場合に前の図形と同時に,と設定しないと何度もそのボタンを押さないとだめ,となります。
そこで,flgFirstというboolean型の変数を用意して,二個目からは

If flgFirst = False Then .Timing.TriggerType = msoAnimTriggerWithPrevious

このように設定することで,実現しています。

今回のコードのポイントはこの辺かなぁ。組んでて楽しかったです。やっぱりパワーポイントネタも,常に探す努力をしよう。楽しい。