관련:   VML경로편집링크

 

VBA로 이동경로 특히 직선이나 간단한 도형 애니메이션을 추가하는 문법 3가지

 

1. 일단 아래로 내려가는 직선 애니메이션을 넣고 VML 경로를 수정하는 방법

Sub AddVML()

    Dim sld As Slide
    Dim shp As Shape
    Dim eft As Effect
    Dim ani As AnimationBehavior
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    Set sld = shp.Parent
    Set eft = sld.TimeLine.MainSequence.AddEffect(shp, msoAnimEffectPathDown, , msoAnimTriggerAfterPrevious)
    eft.Timing.Duration = 0.25
    eft.Timing.SmoothStart = 0
    eft.Timing.SmoothEnd = 0
    Set ani = eft.Behaviors.Add(msoAnimTypeMotion)
    'eft.Behaviors(1).MotionEffect.Path = "M 0 0 L 0.5 0"
    eft.Behaviors(1).MotionEffect.Path = "M 0 0 L 0.25 0 L 0.25 0.25 L 0 0.25 L 0 0 Z"
End Sub

 

2. 사용자지정 애니메이션을 추가하고 VML을 수정하는 방법

Sub AddCustomVML()

    Dim sld As Slide
    Dim shp As Shape
    Dim eft As Effect
    Dim ani As AnimationBehavior
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    Set sld = shp.Parent
    Set eft = sld.TimeLine.MainSequence.AddEffect(shp, msoAnimEffectCustom, , msoAnimTriggerAfterPrevious)
    eft.Timing.Duration = 0.25
    eft.Timing.SmoothStart = 0
    eft.Timing.SmoothEnd = 0

    Set ani = eft.Behaviors.Add(msoAnimTypeMotion)
    ani.MotionEffect.Path = "M 0 0 L 0.25 0 L 0.25 0.25 L 0 0.25 L 0 0 Z"
    'remove hidden behavior
    eft.Behaviors(eft.Behaviors.Count - 1).Delete
 
    'Debug.Print eft.Behaviors.Count
End Sub

이 때는 숨겨진 behavior를 삭제해줘야 이동경로도 제대로 보이고 동작도 제대로 시작합니다.

 

3. VML이 아니라 간단한 직선 이동을 추가하는 방법

Sub AddMotion()

    Dim sld As Slide
    Dim shp As Shape
    Dim eft As Effect
    Dim ani As AnimationBehavior
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    Set sld = shp.Parent
    Set eft = sld.TimeLine.MainSequence.AddEffect(shp, msoAnimEffectCustom, , msoAnimTriggerAfterPrevious)
    eft.Timing.Duration = 0.5
    'eft.Timing.SmoothStart = 0
    'eft.Timing.SmoothEnd = 0
        
    Set ani = eft.Behaviors.Add(msoAnimTypeMotion)
    With ani.MotionEffect
        .FromX = 0
        .FromY = 0
        .ToX = 50       '0~100
        .ToY = 0
    End With
    eft.Behaviors(eft.Behaviors.Count - 1).Delete 'remove hidden behavior
    'Debug.Print eft.Behaviors(eft.Behaviors.Count).MotionEffect.Path
End Sub

이 때도 숨겨진 behavior를 삭제해줘야 제대로 작동합니다.

 

세가지 방법의 차이점 시연입니다.

 

 

 

샘플 파일 첨부합니다.

 

EditVMLPath이동경로수정_220829.pptm
0.07MB