Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PowerPoint VBA使用动画时间线可靠地更改矩形的填充颜色_Vba_Animation_Powerpoint_Fill - Fatal编程技术网

如何通过PowerPoint VBA使用动画时间线可靠地更改矩形的填充颜色

如何通过PowerPoint VBA使用动画时间线可靠地更改矩形的填充颜色,vba,animation,powerpoint,fill,Vba,Animation,Powerpoint,Fill,我正在使用PowerPoint VBA进行编码,但在尝试使用动画时间线和MSOANIMFectChangeFillColor可靠地更改形状(矩形)的填充颜色时遇到困难。发生的情况是第一次效果按预期工作,但在同一形状上重复(通常是第二次或第三次)会导致替换颜色变为另一种不需要的颜色(通常为橙色)。我相信这很容易复制 如果创建PowerPoint并插入填充矩形并运行以下宏(例如单击矩形时)-第一次单击将更改为预期颜色(此处为红色)。但是,如果继续运行宏,颜色(最终)将变为橙色!如果有人能解释为什么会

我正在使用PowerPoint VBA进行编码,但在尝试使用动画时间线和MSOANIMFectChangeFillColor可靠地更改形状(矩形)的填充颜色时遇到困难。发生的情况是第一次效果按预期工作,但在同一形状上重复(通常是第二次或第三次)会导致替换颜色变为另一种不需要的颜色(通常为橙色)。我相信这很容易复制

如果创建PowerPoint并插入填充矩形并运行以下宏(例如单击矩形时)-第一次单击将更改为预期颜色(此处为红色)。但是,如果继续运行宏,颜色(最终)将变为橙色!如果有人能解释为什么会发生这种情况,我将不胜感激,如果有解决办法,请让我知道!我所做的另一个观察是,我经常必须在Visual Basic编辑器中重置项目,以便动画重新开始工作

Dim oshp As Shape
Dim oeff As Effect
Dim MyDocument As Slide

Sub rectangle()

'I don't know if we need this first bit of code but it removes any existing animations on the current timeline'
Dim i As Integer
For i = ActivePresentation.Slides(1).TimeLine.MainSequence.Count To 1 Step -1
ActivePresentation.Slides(1).TimeLine.MainSequence(1).Delete
Next i

'This is the code to create the animation.
Set MyDocument = ActivePresentation.Slides(1)
Set oshp = MyDocument.Shapes("Rectangle 3")
Set oeff = MyDocument.TimeLine.MainSequence.AddEffect _
(Shape:=oshp, effectid:=msoAnimEffectChangeFillColor, trigger:=msoAnimTriggerWithPrevious)
oeff.EffectParameters.Color2.RGB = RGB(255, 0, 0)
oeff.Timing.Duration = 0.25
oeff.Timing.TriggerDelayTime = 0.5

End Sub

我很高兴写信告诉你,我已经找到了我问题的答案,它可能对其他人有用。解决方案是在Sub中声明变量。我不确定是否有规则规定必须始终如此。代码如下所示:

Sub rectangle()

Dim oshp As Shape
Dim oeff As Effect
Dim MyDocument As Slide

'This first bit of code removes any existing animations on the current
'timeline and is not part of the animation.
Dim i As Integer
For i = ActivePresentation.Slides(1).TimeLine.MainSequence.Count To 1 Step -1
ActivePresentation.Slides(1).TimeLine.MainSequence(1).Delete
Next i

'This is the code to create the animation.
Set MyDocument = ActivePresentation.Slides(1)
Set oshp = MyDocument.Shapes("Rectangle 3")
Set oeff = MyDocument.TimeLine.MainSequence.AddEffect _
(Shape:=oshp, effectid:=msoAnimEffectChangeFillColor, trigger:=msoAnimTriggerWithPrevious)
oeff.EffectParameters.Color2.RGB = RGB(255, 0, 0)
oeff.Timing.Duration = 0.25
oeff.Timing.TriggerDelayTime = 0.5

End Sub

我还没有试过编写代码,但是在宏的末尾将对象设置为Nothing总是很好的。我想你是在说我应该添加一行:Set MyObject=Nothing。我要试试看!我现在只使用VBA编写了大约两个星期的代码,并且正在自学。因此,如果有什么我不知道的基本问题,我很抱歉。我正要对这个问题进行评论,要求你清理你的变量声明-我没想到这会改变任何事情,但使用全局变量是一种不好的做法,在这里似乎完全没有必要。VBA代码的两个健全提示:1)始终在模块顶部使用
Option Explicit
。没有例外。2) 将所有全局(模块级)变量转换为局部(函数级)变量,除非真的没有其他方法(发生,但极为罕见)。