如何通过VBA控制PowerPoint表格垂直滚动动画的速度与参数
PPT超长表格垂直滚动动画的MotionEffect问题
我有一个高度687cm的超长PPT表格,需要实现缓慢的上下垂直滚动动画。将表格作为单个动画对象处理是最简单高效的方式。
由于UI设置存在限制(例如最大动画时长仅10分钟,而我需要30分钟及以上),且手动绘制超出幻灯片边界的动画终点(红点)操作繁琐,因此我使用VBA设置动画参数。
以下是三个与MotionEffect对象相关的问题:
- 问题1:基于表格长度,我预期将MotionEffect.ToY设置为-2000%左右(实现向上滚动)。执行宏后,ToY和时长确实已设置,但幻灯片上未显示带绿/红点的动画路径线,动画的路径和速度不符合预期,不过时长在动画窗格中显示正确。
- 问题2:MotionEffect.ToY属性的官方文档指出:返回或设置一个Single值,表示MotionEffect对象的垂直位置,以屏幕宽度的百分比为单位。可读写。我原本预期ToY参考屏幕高度的百分比而非宽度,为何ToX和ToY均参考宽度而非分别参考宽高?
- 问题3:垂直运动速度存在问题:表格高度687cm,我计算得出预期ToY=687/33.867(幻灯片宽度)-1=19,因此设置ToY=1900%。若设置时长为10分钟,预期速度应超过1cm/秒,但实际速度比预期慢3-4倍,即使将ToY缩小2或4倍,速度也无变化。我肯定对ToY的用法存在误解(在简单对象上使用时,设置的ToY百分比能正常反映在动画中)。
附VBA代码:
Sub Scroll_Table() Dim oDoc As Presentation Dim oText As Shape Dim speed, inch, resol, ptSize, txtHeight Set oDoc = ActivePresentation cnt = oDoc.Slides(1).Shapes.Count Set oText = oDoc.Slides(1).Shapes(1) ' 单位转换(磅与厘米) inch = 2.54 ' 1英寸=2.54厘米 resol = 72 ' 1英寸=72磅 ptSize = inch / resol ' 每磅对应的厘米数 ' 将表格定位到幻灯片下方区域 oText.Top = oDoc.PageSetup.SlideHeight txtHeight = oText.Height ' 从表格名称读取播放时长(单位:分钟,小技巧!) play_duration_M = oText.Name play_duration_S = play_duration_M * 60 play_duration_mS = play_duration_S * 1000 ' 预期速度(单位:厘米/秒) speed = (txtHeight * ptSize) / play_duration_S ' 垂直移动距离(百分比) trY = 100 * (-txtHeight / oDoc.PageSetup.SlideWidth - 1) ' 设置动画路径和时长 With oDoc.Slides(1).TimeLine.MainSequence(1).Behaviors.Item(1) .MotionEffect.ToY = trY .Timing.Duration = play_duration_S Debug.Print oDoc.PageSetup.SlideHeight, .Timing.Duration, .MotionEffect.ToY, txtHeight, speed End With With oDoc.SlideShowSettings '.RangeType = ppShowAll .Run End With End Sub
内容的提问来源于stack exchange,提问作者Maurice Cinque
相关产品推荐
相关产品推荐

