使用 Excel 2013 在 PowerPoint 2013 中实现 VBA 脉冲动画

使用 Excel 2013 在 PowerPoint 2013 中实现 VBA 脉冲动画

我希望我使用的是正确的 SE。我找到的帖子引导我在这里发帖。

BLUF:我正在尝试使用 if/else 语句在 PowerPoint 中的特定对象上应用/删除脉冲动画。

背景:代码位于 excel 文档中,因为我将其用作简单的基本比喻防火墙,以防止员工弄乱幻灯片。我想要一个实时更新的文档,将信息推送到正在运行的 PowerPoint 幻灯片中,并根据特定站点的状态(向上或向下)更新文本。我制作了一个简单的向上/向下按钮,该按钮仅在单元格中的向上/向下之间切换,并将其输入到其他单元格中以确定如何处理数据。然后,宏按钮运行代码并更新 PowerPoint 上的文本。

好消息:一切都很好(除了动画)。PowerPoint 运行时文本会发生变化(文字和颜色),锁定 Excel 文档可防止员工弄乱任何设置。

有问题的代码的主要部分:

For Each c In Sheet1.Range("a2:a" & Sheet1.Range("a" & Rows.Count).End(xlUp).Row)

shapeslide = Sheet1.Range("a" & c.Row)
shapename = Sheet1.Range("b" & c.Row)
shapetext = (Sheet1.Range("c" & c.Row).Text)
friendlyname = Sheet1.Range("d" & c.Row)
pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.Text = shapetext

If (friendlyname = "DN") Then
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(255, 0, 0)

'The porttion below worked, but it is not animation (not as cool)
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.PresetTextEffect = 4
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffectFormat = msoAnimEffectBoldFlash

Else
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(0, 255, 0)

End If

Next c

for 语句贯穿我调出特定幻灯片、形状和形状文本的单元格。friendlyname 是重复运行 IF/Else。

如果我将状态更改为 DN,它就会变成红色,如果我将其更改为 UP,它就会变成绿色。

我可以在 If/Else 中使用此代码应用动画:

Dim oeff As Effect
Dim osld As Shape
Set osld = ppapp.ActivePresentation.Slides(shapeslide).Shapes(shapename)
With pPreso.Slides(shapeslide)
Set oeff = .TimeLine.MainSequence.AddEffect(Shape:=.Shapes(shapename),_ effectID:=msoAnimEffectBoldFlash, trigger:=msoAnimTriggerAfterPrevious)
With oeff
.Timing.RepeatDuration = 25
End With
End With

主要问题是(可以理解)它不断应用动画,因为显然没有检查此代码中是否已应用动画。其次,当我尝试引入 oeff.delete 时,它​​只是保留了动画,然后将非动画应用于 PowerPoint 动画窗格中标记为“UP”的所有其他动画。

因此,有两件事:

  1. 有没有应用脉冲动画的选项?我在 msoAnimEffect 库区域中找不到它。

  2. 是否有人能用我创建的方法来优雅地打开或关闭动画,或者我需要想办法设置标志、读取这些标志,然后以某种方式将它们合并到 If/Else 语句中?

这是 Excel 文档的图片:

Excel示例

答案1

在和朋友商量之后,我能够让事情顺利进行,而且我自己还添加了一些额外的趣味。

以下是使动画正常运行的代码:

'新变量
暗淡的时间戳文本
效果图
Dim oshp 作为 PowerPoint.Shape
视作 PowerPoint 幻灯片
'添加效果
设置 oshp = pApp.ActivePresentation.Slides(shapeslide).Shapes(shapename)
使用 pPreso.Slides(shapeslide)
设置 oeff = .TimeLine.MainSequence.AddEffect(Shape:=Shapes(shapename),effectID:_
=msoAnimEffectFlashBulb,触发器:=msoAnimTriggerWithPrevious)
使用 oeff
'持续 60 秒幻灯片
.Timing.重复持续时间 = 60
结尾
结尾

然后是摆脱这些动画的部分(感谢 CM!)

'删除效果
设置 osld = pPreso.Slides(shapeslide)
“28 只是因为我还有 28 个其他动画需要保留
如果 osld.TimeLine.MainSequence.Count>28 那么
对于 i = osld.TimeLine.MainSequence.Count 到 29 步骤 -1
设置 oeff = osld.TimeLine.MainSequence(i)
如果 oeff.Shape.Name 类似于 shapename 那么
删除
万一
接下来我
万一

希望这对一些人有所帮助。

作为奖励,我在幻灯片中添加了一个时间戳,以便我可以看到上次使用此代码更新状态的时间(对象是所有幻灯片上的文本框 28,时间戳是 Excel 中单元格 H25 中的“NOW()”函数):

注意:这是在主 For 循环内,但在主 If/Else ="DN" 之外

时间戳文本 = (Sheet1.Range(“H”&25)。文本)
pPreso.Slides(shapeslide).Shapes("文本框 28").TextEffect.Text = timestamptext

相关内容