2017-08-15 2 views
0

Je suis en train de créer une ligne d'objets dupliqués dans PowerPoint, chacun avec un chemin de mouvement qui est légèrement plus courte que les autres, comme celui-ci:Incrémenter la longueur d'un chemin de mouvement copié en utilisant VBA

First Image

Je sais que vous ne pouvez pas ajouter une animation de chemin à partir de zéro dans VBA, j'ai donc utilisé VBA pour copier et coller un objet et son chemin d'accès, puis éditer le chemin de mouvement.

Ceci est mon code VBA: Sous CopyPastePosition()

' Copy the shape in slide 2 which has a custom motion path aleady 
    ActivePresentation.Slides(2).Shapes(3).Copy 

    Dim x As Integer 
    ' For loop - create 5 duplicates 
    For x = 1 To 5 
    ' Each duplicate is nudged to the left by x*100 
    With ActivePresentation.Slides(1).Shapes.Paste 
     .Name = "Smiley" 
     .Left = x * 100 
     .Top = 1 
    End With 

    ' This is where I am unsure - I want the motion path to be longer by x amount each time 

ActivePresentation.Slides(1).TimeLine.MainSequence(x).Behaviors(1).MotionEffect.Path = "M 0 0 L 0 x*0.7" 

Next x 
End Sub 

Cependant, la sortie est comme ceci: Second Image

+0

Je ne sais rien à propos de powerpoint vba, mais si je devais deviner, j'essaierais ... "M 0 0 L 0" & (x * 0,7) ' – braX

Répondre

0

Oui, je me rends compte que je suis en train d'insérer une variable dans un chaîne. oui la bonne façon de le faire est "M 0 0 L 0 " & (x * 0.7)

Merci @braX

0

propriété Path pour le chemin de mouvement qui représente une chaîne VML. La chaîne VML est une collection de coordonnées pour une courbe Line ou Bézier (pour powerpoint). Les valeurs sont des fractions des dimensions de la diapositive.

Vous pouvez générer un chemin VML incrémentiel avec cette fonction.

Function GetPath(MaxSegments As Integer, Increment As Single) 
Dim path As String 
Dim i As Integer 

path = "M 0 0 " 

For i = 1 To MaxSegments 
    path = path & "L 0 " & CStr(Increment * i) & " " 
Next 

path = path & " E" 

GetPath = path 
End Function 

Puisque vous faites copier/coller d'une forme avec le chemin de mouvement déjà, je voudrais aussi faire ce changement pour nous assurer de faire référence à la trajectoire correcte à la pâte:

With ActivePresentation.Slides(1).TimeLine 
    .MainSequence(.MainSequence.Count).Behaviors(1).MotionEffect.path = GetPath(x, 0.7) 
End With