找到动力点动画步骤vba

时间:2013-11-05 10:30:38

标签: vba animation powerpoint powerpoint-vba

我有一个vba脚本,可以在演示文稿中的幻灯片上运行电源点演示文稿。在同一张幻灯片上,我有一个动画。运行动画时,脚本在“后台”运行良好,但在动画的某个步骤,我想更改vba脚本的运行方式。通过检查时间轴对象或其他地方来检查动画运行的距离,或者在达到正确的步骤时触发事件,但我找不到任何东西。

这是我目前的剧本(说明放射源,向各个方向发出辐射)

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Running As Boolean ' Switched on or off by another sub

Sub DrawLines()
  Dim endx As Long
  Dim endy As Long
  Dim Slideid As Long
  Dim tetha As Double
  Dim origx As Long
  Dim origy As Long
  Dim linelength As Long
  Dim tl As TimeLine

  Slideid = 2
  origx = 100
  origy = 430
  linelength = 2000

  Dim newline As Shape
  While Running

  With ActivePresentation.Slides(Slideid).Shapes
    tetha = 2 * 3.1415 * Rnd()
    endx = Int(linelength * Sin(tetha))
    endy = Int(linelength * Cos(tetha))
    ' Here I want to alter endx and endy after a certain step in the animation

    Dim sleeptime As Long
    sleeptime = Int(500 * Rnd())
    Set newline = .AddLine(origx, origy, endx, endy)
    DoEvents ' needed to redraw
    Sleep (30)
    newline.Delete
    DoEvents  ' needed to redraw
    Sleep (sleeptime)
  End With
  Wend
End Sub   

在我想改变endx和endy的时候,我一直在寻找像

这样的东西
IF Activepresentation.slides(slideid).timeline.activestep>=5 THEN
   dosomething()
End if

或者我是否可以制作类似

的内容
Public Changed as boolean
Sub OnSlideShowAnimationStep( .... )
  IF currentstep >=5
     Changed = TRUE
  end if
end sub

然后我可以检查drawline中的Changed,但我找不到任何属性告诉我当前的动画步骤,也没有任何在动画步骤中触发的事件。我应该看看其他任何地方吗?

2 个答案:

答案 0 :(得分:2)

如果动画为On Click,您可以使用SlideShowWindow(1),View.GetClickCount

否则你可以使用OnSlideShowNextBuild(ByVal Wn As SlideShowWindow)来计算

答案 1 :(得分:0)

我不知道任何事件或方法来检查时间轴上的步骤或位置 但你有一个黑客可以解决这个问题。

当您在循环中时,您始终可以检查形状的(左侧,顶部)位置。这会在动画运行时发生变化。

但另一方面,您可以使用Effect对象的MoveTo函数手动迭代动画。 MSDN

但我自己没有用过它。