【PowerPoint VBA】アニメーションの「直前の動作と同時」を一括設定する方法(TriggerType)
パワーポイントで複数の図形やテキストにアニメーションを設定する際、一つずつ「直前の動作と同時に開始」に変更するのは面倒ですよね。

今回は、知恵袋の質問をきっかけに、選択した複数のシェイプに対して''「フェード」効果を追加し、2つ目以降を自動的に「直前の動作と同時」に設定するVBAコード''を解説します。
...と言いつつ、最後には衝撃の結末(?)が待っています。
動画で実演と解説
実際の動作と、変数の中身をウォッチ式で覗いている様子は動画を確認してください。
[00:00](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=0s) 0.やりたいこと
[00:35](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=35s) 1.ランキング発表を例に実演
[03:23](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=203s) 2.簡単なコードの説明
[11:00](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=660s) 3.ウォッチ式で確認してみます
[16:45](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=1005s) 4.終わりの挨拶(衝撃の事実)
PowerPoint VBA ソースコード
選択したシェイプをループで回し、アニメーション効果(Effect)を追加してタイミング(Timing)を制御するコードです。
'選択されたシェイプにアニメ効果を追加する
'複数選択時、2つ目以降を「直前の動作と同時」にする
Sub pp選択シェイプにアニメ効果を追加_20230130test()
'シェイプが選択されているかチェック
If ActiveWindow.Selection.Type <> ppSelectionShapes Then
MsgBox "Shape図形やテキストボックスを選択してね"
Exit Sub
End If
Dim nPAGE As Integer
Dim objSLD As PowerPoint.Slide 'スライド
Dim objShape As PowerPoint.Shape 'シェイプ
nPAGE = ActiveWindow.Selection.SlideRange.SlideIndex '現在選択しているページ
Set objSLD = ActivePresentation.Slides(nPAGE) 'スライドオブジェクトをセット
'アニメーションの管理はTimeLineオブジェクトで行う
Dim objTimeLine As PowerPoint.TimeLine
Set objTimeLine = objSLD.TimeLine
Dim objEffect As PowerPoint.Effect 'アニメーション効果
'1個目のシェイプを基準としてアニメを追加(クリックで開始)
Set objShape = ActiveWindow.Selection.ShapeRange(1)
Set objEffect = objTimeLine.MainSequence.AddEffect(objShape, msoAnimEffectFade)
'タイミングのセット:クリック時
objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick
'複数選択の2個目以降をループ処理
Dim n As Integer
For n = 2 To ActiveWindow.Selection.ShapeRange.Count
Set objShape = ActiveWindow.Selection.ShapeRange(n)
'フェード効果を追加
Set objEffect = objTimeLine.MainSequence.AddEffect(objShape, msoAnimEffectFade)
'タイミングのセット:直前の動作と同時
objEffect.Timing.TriggerType = msoAnimTriggerWithPrevious
Next
MsgBox "処理終了、アニメーションウインドで確認してください"
End Sub
コードのポイント解説
1. TimeLineオブジェクト
パワーポイントのアニメーションは、スライドオブジェクトの下にある''TimeLine(タイムライン)''で管理されています。 [03:23](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=203s)
さらにその中の''MainSequence(メインシーケンス)''に対して「AddEffect」することで、新しいアニメーションを追加できます。
2. TriggerTypeプロパティ
アニメーションが「いつ」始まるかを決めるのが、''Timing.TriggerType''です。 [08:44](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=524s)
- ''msoAnimTriggerOnPageClick'' :クリック時
- ''msoAnimTriggerWithPrevious'' :直前の動作と同時
- ''msoAnimTriggerAfterPrevious'' :直前の動作の後
動画内では、ウォッチ式を使って、これらのプロパティが内部でどう保持されているかを詳しく解説しています。 [11:00](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=660s)
まさかのオチ:VBAは不要だった?
一生懸命コードを書きましたが、動画の最後で気づいてしまいました。 [16:45](https://www.youtube.com/watch?v=n0wT7AL8wYU&t=1005s)
「複数の図形を選択した状態で、標準機能の『アニメーションの追加』ボタンを押すと、自動的に2番目以降が『直前の動作と同時』に設定される」
実はパワポの標準機能が優秀すぎて、この程度の処理ならマクロを組む必要がなかったという衝撃の事実。
とはいえ、大量のスライドを自動生成する場合や、より複雑なディレイ(遅延)制御を行う場合には、今回紹介したVBAの知識(TimeLineやTriggerTypeの操作)が必ず役に立つはずです。