只是为了让大家都知道,我是VBA的初学者,我正在使用Excel和PowerPoint 2013.
目标:我在Excel VBA中编写代码,将Excel中的图表粘贴到PowerPoint中。然后粘贴时,将其移动到幻灯片中的固定位置。
我使用的代码:我开始使用的代码框架位于http://peltiertech.com/Excel/XL_PPT.html#chartppt,即“将活动Excel图表粘贴到活动PowerPoint幻灯片(早期绑定)”部分。 主要区别在于'粘贴'部分,而是'PasteSpecial',我的代码如下:
Charty.CopyPicture
ppApp.ActivePresentation.Slides(SlideNumber).Shapes.PasteSpecial (ppPasteEnhancedMetafile)
' Setting the correct position on the slide
ppApp.ActiveWindow.Selection.ShapeRange.Top = ChartTop
ppApp.ActiveWindow.Selection.ShapeRange.Left = ChartLeft
(注意:ChartTop和ChartLeft已在前面定义过)
问题:我知道在PasteSpecial之后它没有select语句。但是,(1)当我运行上面的代码时,我得到一个运行时错误'-2147188160',说Selection.ShapeRange是一个无效的请求(在'ChartTop'行中),即。它未被选中,因此无法移动。 (2)当我向'Paste.Special'行添加一个select语句时,我在新的'PasteSpecial'行上得到'Object required'错误,即。它不会将其识别为粘贴选择语句。
奇怪的部分:当我在其他人的计算机上使用完全相同的Excel和PowerPoint文件运行相同的宏时,它可以工作(没有'PasteSpecial'行中的select语句)。我看过'工具'=> '引用',我们的计算机都有相同的设置。
问题:我的计算机上是否有一个设置被忽略,导致代码无法正常工作?在我粘贴之后有没有办法在移动之前重新选择它(我应该告诉你,宏是同时将多个图形粘贴到ppt中)?为什么其他人在我的工作中没有PasteSpecial声明的“select”部分就可以在他们的计算机上工作?为什么我使用Shapes.PasteSpecial(ppPasteEnhancedMetafile).Select语句时,它不会将它识别为对象?
我希望这很清楚。 提前谢谢。
答案 0 :(得分:0)
Dim oSh as Shape
Set oSh = ppApp.ActivePresentation.Slides(SlideNumber).Shapes.PasteSpecial (ppPasteEnhancedMetafile)(1)
现在您不需要选择任何东西(尽可能最好避免)。只需直接操作粘贴的形状,oSh。
好奇的语法(最后的(1))是因为Shapes.Paste或.PasteSpecial返回一个shaperange,而不是一个形状; (1)使它将范围中的第一个形状分配给oSh变量。由于该范围内只有一种形状,这对我们来说很合适。