三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

パワポ アニメーションのTimeLineとMainSequenceを使用してアニメ効果Effectのセッ ト PowerPoint VBA アニメ効果をランダムで追加

やりたいこと: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 ランダムでスライドインの方向オプションがあることに今頃気が付く・・・

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)