【发布时间】:2017-08-25 20:50:15
【问题描述】:
我正在尝试在 Microsoft Office PowerPoint 中使用 VBA 为图片添加浮动入口效果。
我希望动画中的浮动在向下方向
这是我的代码:
Sub add_pic_float_in()
' Insert the Picture
Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes.AddPicture FileName:="C:\Users\forson\Pictures\Picture.svg", LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, _
Left:=a * 10, Top:=-1000, Width:=359.055, Height:=1284.803
' Crop the Image
With myDocument.Shapes(1)
.Name = "Picture 1"
.PictureFormat.CropLeft = 140
.PictureFormat.CropRight = 130
.PictureFormat.CropTop = 650
End With
' Create shape
Dim picture As Shape
Set picture = myDocument.Shapes(1)
' Create Effect
Dim floatin As Effect
' Set Effect to Picture
Set floatin = myDocument.TimeLine.MainSequence.AddEffect(Shape:=picture, effectId:=msoAnimEffectFloat)
floatin.Timing.Duration = 1
floatin.EffectParameters.Direction = msoAnimDirectionDown
floatin.Timing.TriggerType = msoAnimTriggerWithPrevious
End Sub
但是,我遇到了这个错误:
“运行时错误”:'-2147188160 (80048240)':EffectParameters(未知成员):无效请求。”
当我删除“floatin.EffectParameters.Direction = msoAnimDirectionDown”行时,它会生成一个带有动画的对象,但它不是“浮动”动画。
【问题讨论】:
-
不是你得到的错误,但
myDocument应该是一个声明的局部变量。Option Explicit是否指定在模块顶部?这样做将迫使您声明所有变量,从而阻止 VBA 愉快地编译拼写错误。也就是说,ActivePresentation.Slides(1)应该是myDocument;您无缘无故地取消引用同一个对象两次。floatin局部变量可以替换为With块。但无论如何这些只是小改进,对PowerPoint对象模型并不熟悉。祝你好运! -
那...不是我的意思。您在 3 个位置取消引用
ActivePresentation.Slides(1)对象 - 该变量 是 有用的。我的建议是使用它,而不是删除它! -
@Mat'sMug 好点,我已将其更改为删除 myDocument 变量,因为它没有被太多使用。如何使用“With”块替换“floatin”局部变量?很抱歉我的理解不够,我已经按照this教程添加了一个效果。
-
@Mat'sMug 哦,好吧,哎呀对不起好吧,我会改的。
-
我的意思是你可以用
With mySlide.TimeLine.MainSequence.AddEffect(...) ... End With代替Set floatin = ...,然后在该块内你可以用.Timing.Duration = 1、.Timing.TriggerType = ...和.EffectParameters.Direction = ...;floatin不需要在那里,With块可以为您保存该引用。
标签: vba powerpoint