やりたいこと:VBAからアニメーションの設定を行う方法を探ってみた
https://www.youtube.com/watch?v=SnghajBQwIM
www.youtube.com
目次 長いので、休憩しながら分けてみてください。
00:00 あいさつ 1.まず、サンプルを見せる サンプルの紹介
00:36 1.1 選択したシェイプに対して、スライドインのアニメーションを付けてみた
02:59 1.2 現在のスライドに設定した、アニメを全て削除する実演
06:39 1.3 全てのスライド内画像をTYPEで判断して6種類のアニメをランダムで付ける
09:02 1.4 全てのスライドのアニメを削除する
09:42 2.コードの紹介といつもの脳内解説
12:16 2.1 タイムラインは、2種類あります。
17:14 スライドの下にタイムライン TimeLine MainSequence
20:25 2.2 PowerPoint.Effect アニメ効果を追加する 設定する
26:39 AddEffectを解説する
27:37 アニメの種類 2.3 EffectId で種類 個別に解説
31:01 シーソーをテスト シーソーはアウト・クリアが無いので注意すること
34:43 2.4 Effect.Timing でタイミングをセット
38:32 デバッグ中にマウスカーソルが消えてパニック 原因はスライドショー デバッグ時注意してね
40:33 マウスクリック時を直前の動作と同時 msoAnimTriggerWithPreviousに変更する
47:20 2.5 Effect.Exit Trueでクリアにする、スライドアウトのテスト
52:55 先頭はクリック、他は同時をセットする工夫?
54:24 2.4.2 先頭をクリック時にするには
56:09 遅延の再テスト Timing.TriggerDelayTime = 1 遅延
57:32 2.4.3 直前の動作の後 Timing.TriggerType = msoAnimTriggerAfterPrevious をテスト
01:01:58 3.いつもの現物をイミディエイトウィンドウやウォッチ式で確認する
01:06:35 ホイールの値を msoAnimEffectWheel を調べる手順
01:11:29 カラーパルス msoAnimEffectFlicker を調べる エラーをテストする
5.蛇足:>パワーポイントで500枚の写真に一括でアニメーションを付ける方法
01:19:14 アニメ効果を消すには Effect.Delete 単純にDeleteメソッドでした
01:22:07 If Shp.Type = msoPicture で画像を判断
01:29:50 蛇足2:アニメ 効果 を複数用意して、ランダムで追加してみる
01:32:07 Rnd関数を簡単に説明した
01:36:23 頭はクリック単位にして、後ろは直前の動作と同時にアレンジしてみた
01;41:05 同じ位置に重ねた複数の画像 イラストを貼ってテストする
01:42:55 不具合 シーソーのアニメがジャマをして重なったままになった
01:44:20 シーソーをホイール msoAnimEffectWheelに変更して再度テストする
01:47:35 ランダムでスライドインの方向オプションがあることに今頃気が付く・・・
1.まず、サンプルを見せる サンプルの紹介
1.1 選択したシェイプに対して、スライドインのアニメーションを付けてみた
1.2 現在のスライドに設定した、アニメを全て削除する実演
1.3 全てのスライド内画像をTYPEで判断して6種類のアニメをランダムで付ける
1.4 全てのスライドのアニメを削除する
2.コードの紹介といつもの脳内解説
ActiveWindow.Selection は、軽く流して、 Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ nPAGE = ActiveWindow.Selection.SlideRange.SlideIndex '現在選択しているページ Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット
2.1 タイムラインは、2種類あります。
タイムラインには、二つ
順番に流れる MainSequence
と
クリック動作で動く InteractiveSequences
が存在します。
InteractiveSequencesは別動画
https://www.youtube.com/watch?v=9PNq6QRLtZ0
↑を見てください。
今回は、
順番に流れる MainSequence を触ってみます。
'アニメ効果 Dim objTimeLine As PowerPoint.TimeLine 'タイムラインって日本語だと?何だろう? Set objTimeLine = objSLD.TimeLine 'スライドの下にタイムラインがあります Dim objMainSequence As PowerPoint.Sequence 'シーケンス 順序: インタラクティブ? Set objMainSequence = objTimeLine.MainSequence 'メインで順番に進むアニメ '↑このタイムラインにアニメ効果を追加していくイメージです Dim objEffect As PowerPoint.Effect '効果
2.2 PowerPoint.Effect アニメ効果を追加する 設定する
簡単に、全体の流れを説明する
'複数選択の1個目~ アニメを追加 Dim n As Integer 'カウンター For n = 1 To ActiveWindow.Selection.ShapeRange.Count '選択された数までループ Set objShape = ActiveWindow.Selection.ShapeRange(n) '←このシェイプを↓アニメ効果を追加 '今回は、MainSequenceに追加、ターゲットのシェイプとアニメタイプをセット Set objEffect = objMainSequence.AddEffect(Shape:=objShape, _ EffectId:=msoAnimEffectFly) '↑作成されたアニメ効果に対して、タイミングをセット objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 objEffect.Timing.Duration = 1.5 '1.5秒とわざと小数にしてみた objEffect.Exit = msoFalse '表示のアニメなので、※フェードイン・アウト等は、ここで操作 Set objEffect = Nothing '念のためクリア Next
2.3 EffectId で種類 個別に解説
objMainSequence.AddEffect(Shape:=objShape, EffectId:=msoAnimEffectFly)
で、このシェイプにアニメの種類を追加する
すると、気になるのが、アニメの種類
MsoAnimEffect 列挙 (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.msoanimeffect
↑ここに、アニメの種類
msoAnimEffectAppear 1 アピール
msoAnimEffectBounce 26 バウンド
msoAnimEffectWipe 22 ワイプ効果
↑英語の意味がわからなくて、標準の表示がアピール?ってのが・・・おっと恥の上塗りでした。
msoAnimEffectTeeter 80 シーソー効果
※objEffect.Exit = msoFalse '表示のアニメなので、※フェードイン・アウト等は、ここで操作
でエラー注意
msoAnimEffectFly 2 スライド効果
で、テストしてみます。
2.4 Effect.Timing でタイミングをセット
'↑作成されたアニメ効果に対して、タイミングをセット
objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時
objEffect.Timing.Duration = 1.5 '1.5秒とわざと小数にしてみた
など、確認する
タイミング オブジェクト (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.timing
Decelerate アニメーションを実行する時間の割合を指定します。
TriggerDelayTime 起動を有効にしたときからの遅延時間を秒単位で指定します。
'objEffect.Timing.TriggerDelayTime = 0.5 '遅延
2.4.1 .Timing.TriggerType msoAnimTriggerWithPrevious '同時
'↑作成されたアニメ効果に対して、タイミングをセット objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 'objEffect.Timing.TriggerType = msoAnimTriggerWithPrevious '同時
2.4.2 先頭をクリック時にするには、
'↑作成されたアニメ効果に対して、タイミングをセット If n = 1 Then objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 Else objEffect.Timing.TriggerType = msoAnimTriggerWithPrevious '同時 End If
2.4.3 msoAnimTriggerAfterPrevious '動作の後
'↑作成されたアニメ効果に対して、タイミングをセット If n = 1 Then objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 Else 'objEffect.Timing.TriggerType = msoAnimTriggerWithPrevious '同時 objEffect.Timing.TriggerType = msoAnimTriggerAfterPrevious '動作の後 End If ||< 2.5 Effect.Exit で表示とクリアをコントロール Effect.Exit = msoTrue にすると、終了、クリアのアニメを作ることができる。 スライドインとアウトをここで操作可能。 以上、簡単なアニメ設定方法でした。 3.いつもの現物をイミディエイトウィンドウやウォッチ式で確認する F1でMSヘルプwebサイトを見たり、chatGPTに聞いたりする? あとは、いつもの、ウォッチ式で確認したり・・・ 止めて、確認を実演 >> : EffectType : msoAnimEffectSplit : MsoAnimEffect : Module3.test240228_02アニメタイムラインをテスト表示 msoAnimEffectSplit 16 : EffectType : msoAnimEffectWheel : MsoAnimEffect : Module3.test240228_02アニメタイムラインをテスト表示 msoAnimEffectWheel 21 : EffectType : msoAnimEffectFlicker : MsoAnimEffect : Module3.test240228_02アニメタイムラインをテスト表示 msoAnimEffectFlicker 76 << 4.終わりの挨拶 こんな感じで、VBAでアニメーションをセットできるので、活用してみてください #PowerPointVBA #パワーポイント #アニメーション #TimeLine #MainSequence #Effect 5.蛇足: >> >パワーポイントのアニメーションについて質問です。 >パワーポイントで500枚の写真に一括でアニメーションを付ける方法を教えて下さい。 >色んなアニメーションをランダムにつけるられる方法も教えて下さい。 << 全てのスライドの画像Type=msoPictureに対して、アニメのスライドインを1.5秒追加してみた >|vb| '蛇足で全てのスライドをループして、画像Type=msoPictureにアニメを付けてみた '>パワーポイントのアニメーションについて質問です。 '>パワーポイントで500枚の写真に一括でアニメーションを付ける方法を教えて下さい。 'アニメ msoAnimEffectFly 2 スライド効果 をテストで追加 Sub test240228_04蛇足画像Shapeにアニメスライドインを追加() Dim nPAGE As Integer Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ Dim objTimeLine As PowerPoint.TimeLine 'タイムラインって日本語だと?何だろう? Dim objMainSequence As PowerPoint.Sequence 'シーケンス 順序: インタラクティブ? Dim objEffect As PowerPoint.Effect '効果 Dim n As Integer 'カウンター For nPAGE = 1 To ActivePresentation.Slides.Count '全てのスライド Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット 'アニメ効果 Set objTimeLine = objSLD.TimeLine 'スライドの下にタイムラインがあります Set objMainSequence = objTimeLine.MainSequence 'メインで順番に進むアニメ '↑このタイムラインにアニメ効果を追加していくイメージです '複数選択の1個目~ アニメを追加 For n = 1 To objSLD.Shapes.Count 'スライド内のシェイプ数分ループ Set objShape = objSLD.Shapes(n) '←このシェイプを↓アニメ効果を追加 If objShape.Type = msoPicture Then 'msoPictureで画像を判断 '今回は、MainSequenceにType=画像だったら、アニメをセット Set objEffect = objMainSequence.AddEffect(Shape:=objShape, _ EffectId:=msoAnimEffectFly) '↑作成されたアニメ効果に対して、タイミングをセット objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 objEffect.Timing.Duration = 0.5 '1.5秒とわざと小数にしてみた objEffect.Exit = msoFalse '表示のアニメなので、※フェードイン・アウト等は、ここで操作 Set objEffect = Nothing '念のためクリア End If Next Next MsgBox "処理終了、アニメーションウインドで確認してください" End Sub
'削除 テスト時に便利な削除 'アクティブスライドのTimeLine.MainSequenceをテストで表示する Sub test240228_05全てのスライドでアニメ効果を削除() Dim nPAGE As Integer Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ For nPAGE = 1 To ActivePresentation.Slides.Count '全てのスライド Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット 'アニメ効果 Dim objTimeLine As PowerPoint.TimeLine 'タイムラインって日本語だと?何だろう? Set objTimeLine = objSLD.TimeLine 'スライドの下にタイムラインがあります Dim objMainSequence As PowerPoint.Sequence 'シーケンス 順序: インタラクティブ? Set objMainSequence = objTimeLine.MainSequence 'メインで順番に進むアニメ '↑このタイムラインにアニメ効果が格納されているイメージです Dim objEffect As PowerPoint.Effect '効果 単体で見たかったので '削除の基本、ダルマ落としの後ろから消す? Dim n As Integer 'カウンター For n = objMainSequence.Count To 1 Step -1 '下のオブジェクトから削除する 'アニメ効果を代入 Set objEffect = objMainSequence.Item(n) '単にn番目、後ろから消したかったので '削除 objEffect.Delete '単純にDeleteメソッドでした。 Next Next MsgBox "削除終了、確認してね" End Sub
'蛇足で全てのスライドをループして、画像Type=msoPictureにアニメを付けてみた '>パワーポイントのアニメーションについて質問です。 '>パワーポイントで500枚の写真に一括でアニメーションを付ける方法を教えて下さい '>色んなアニメーションをランダムにつけるられる方法も教えて下さい。 'アニメ 効果 を複数用意して、ランダムで追加してみる Sub test240228_06蛇足画像Shapeにアニメ複数の種類を追加() 'アニメ効果を複数用意する ' https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.msoanimeffect Dim EffectIdBOX(10) As Long EffectIdBOX(1) = msoAnimEffectFly '2 スライド効果 EffectIdBOX(2) = msoAnimEffectWipe '22 ワイプ効果 EffectIdBOX(3) = msoAnimEffectSwivel '19 ターン効果 EffectIdBOX(4) = msoAnimEffectWheel 'ホイール EffectIdBOX(5) = msoAnimEffectBounce '26 バウンド EffectIdBOX(6) = msoAnimEffectSplit '16 スプリット効果 Dim nRND As Long '乱数受け取り用 Randomize '乱数の初期化を頭で Dim nPAGE As Integer Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ Dim objTimeLine As PowerPoint.TimeLine 'タイムラインって日本語だと?何だろう? Dim objMainSequence As PowerPoint.Sequence 'シーケンス 順序: インタラクティブ? Dim objEffect As PowerPoint.Effect '効果 Dim n As Integer 'カウンター For nPAGE = 1 To ActivePresentation.Slides.Count '全てのスライド Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット 'アニメ効果 Set objTimeLine = objSLD.TimeLine 'スライドの下にタイムラインがあります Set objMainSequence = objTimeLine.MainSequence 'メインで順番に進むアニメ '↑このタイムラインにアニメ効果を追加していくイメージです Dim nFLG As Long nFLG = 0 '複数選択の1個目~ アニメを追加 For n = 1 To objSLD.Shapes.Count 'スライド内のシェイプ数分ループ Set objShape = objSLD.Shapes(n) '←このシェイプを↓アニメ効果を追加 If objShape.Type = msoPicture Then 'msoPictureで画像を判断 '今回は、MainSequenceにType=画像だったら、アニメをセット nRND = Int((6 * Rnd) + 1) '1~6の乱数 アニメの種類をランダムっぽく? Set objEffect = objMainSequence.AddEffect(Shape:=objShape, _ EffectId:=EffectIdBOX(nRND)) '↑作成されたアニメ効果に対して、タイミングをセット objEffect.Timing.TriggerType = msoAnimTriggerOnPageClick '通常のクリック時 '↑作成されたアニメ効果に対して、タイミングをセット objEffect.Timing.Duration = 1 '1.5秒とわざと小数にしてみた 'objEffect.Exit = msoFalse 'コメントにする、効果によってエラーになるため Set objEffect = Nothing '念のためクリア End If Next Next MsgBox "処理終了、アニメーションウインドで確認してください" End Sub
※冒頭と同じ動画のリンクです
https://www.youtube.com/watch?v=SnghajBQwIM
www.youtube.com
目次 長いので、休憩しながら分けてみてください。
00:00 あいさつ 1.まず、サンプルを見せる サンプルの紹介
00:36 1.1 選択したシェイプに対して、スライドインのアニメーションを付けてみた
02:59 1.2 現在のスライドに設定した、アニメを全て削除する実演
06:39 1.3 全てのスライド内画像をTYPEで判断して6種類のアニメをランダムで付ける
09:02 1.4 全てのスライドのアニメを削除する
09:42 2.コードの紹介といつもの脳内解説
12:16 2.1 タイムラインは、2種類あります。
17:14 スライドの下にタイムライン TimeLine MainSequence
20:25 2.2 PowerPoint.Effect アニメ効果を追加する 設定する
26:39 AddEffectを解説する
27:37 アニメの種類 2.3 EffectId で種類 個別に解説
31:01 シーソーをテスト シーソーはアウト・クリアが無いので注意すること
34:43 2.4 Effect.Timing でタイミングをセット
38:32 デバッグ中にマウスカーソルが消えてパニック 原因はスライドショー デバッグ時注意してね
40:33 マウスクリック時を直前の動作と同時 msoAnimTriggerWithPreviousに変更する
47:20 2.5 Effect.Exit Trueでクリアにする、スライドアウトのテスト
52:55 先頭はクリック、他は同時をセットする工夫?
54:24 2.4.2 先頭をクリック時にするには
56:09 遅延の再テスト Timing.TriggerDelayTime = 1 遅延
57:32 2.4.3 直前の動作の後 Timing.TriggerType = msoAnimTriggerAfterPrevious をテスト
01:01:58 3.いつもの現物をイミディエイトウィンドウやウォッチ式で確認する
01:06:35 ホイールの値を msoAnimEffectWheel を調べる手順
01:11:29 カラーパルス msoAnimEffectFlicker を調べる エラーをテストする
5.蛇足:>パワーポイントで500枚の写真に一括でアニメーションを付ける方法
01:19:14 アニメ効果を消すには Effect.Delete 単純にDeleteメソッドでした
01:22:07 If Shp.Type = msoPicture で画像を判断
01:29:50 蛇足2:アニメ 効果 を複数用意して、ランダムで追加してみる
01:32:07 Rnd関数を簡単に説明した
01:36:23 頭はクリック単位にして、後ろは直前の動作と同時にアレンジしてみた
01;41:05 同じ位置に重ねた複数の画像 イラストを貼ってテストする
01:42:55 不具合 シーソーのアニメがジャマをして重なったままになった
01:44:20 シーソーをホイール msoAnimEffectWheelに変更して再度テストする
01:47:35 ランダムでスライドインの方向オプションがあることに今頃気が付く・・・