我有一个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,但我找不到任何属性告诉我当前的动画步骤,也没有任何在动画步骤中触发的事件。我应该看看其他任何地方吗?
答案 0 :(得分:2)
如果动画为On Click,您可以使用SlideShowWindow(1),View.GetClickCount
否则你可以使用OnSlideShowNextBuild(ByVal Wn As SlideShowWindow)来计算
答案 1 :(得分:0)
我不知道任何事件或方法来检查时间轴上的步骤或位置 但你有一个黑客可以解决这个问题。
当您在循环中时,您始终可以检查形状的(左侧,顶部)位置。这会在动画运行时发生变化。
但另一方面,您可以使用Effect对象的MoveTo函数手动迭代动画。 MSDN
但我自己没有用过它。