将图表从Excel复制到PowerPoint的脚本错误

我试图调用下面的Sub以便将给定的图表复制到指定的PowerPoint演示文稿。 但是,当我运行调用此Sub的macros时,下面指示的行将返回以下错误:“对象不支持此属性或方法”。 奇怪的是,Shapes和Slide都包含被调用的方法。 同样,位图被正确地复制到我的剪贴板在错误被调用之前粘贴到幻灯片中。 你会发现下面的Sub()。

Sub copyChart(chrt As Chart, pres As PowerPoint.Presentation) Dim curSlide As Slide, dummySlide As Slide Set dummySlide= pres.Slides(2) 'Second slide is dummy slide. Set curSlide = dummySlide.Duplicate(1) 'Duplicate dummy, set as current slide. chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 'Copy the chart as a picture. curSlide.Shapes.Paste '<-----------Error here. End Sub 

另外,我希望提供整个脚本的.txt文件,但不确定如何(这里粘贴有点冗长)。 谢谢你的帮助。

(请注意,这个实现与使用VBA将Excel粘贴到Powerpoint中非常相似,这使我更加困惑。)

我在最近的Office版本中遇到了很多麻烦。 2003年和更早的时候没有这个问题,2007年和2010年有点,2013年和2016年。

当你通过代码的时候,它的工作正常,但是当你全速运行时,它在粘贴时会出错。

就好像副本没有时间完成,所以当你粘贴剪贴板的时候没有任何东西粘贴。

有时这有助于:

 chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap DoEvents curSlide.Shapes.Paste 

DoEvents告诉VBA等待后台操作有机会完成。

看起来错误可以归因于VBA如何处理不同引用的variables。 (特别是,PPT VBA如何处理它们)。我可以通过主动select/复制图表来获得macros。 我需要做更多的研究来弄清为什么variables会带来问题,但至less我知道如何解决这个问题。

 Sub copyChart(curSlide As Slide) Dim chr as ChartObject Set chr = Sheets("CHARTSHEET").ChartObjects(1) Sheets("CHARTSHEET").Select ActiveChart.CopyPicture curSlide.Shapes.PasteSpecial End Sub 

我喜欢使用另一种方法,我喜欢定义一个Object ,然后将其设置为粘贴图表。 之后,在PowerPoint中修改粘贴的Chart对象的参数(从Excel)更容易。

见下面的代码:

 Sub copyChart(curSlide As Slide) Dim chr As ChartObject Dim myChart As Object Set chr = Sheets("CHARTSHEET").ChartObjects(1) chr.Copy ' setting myChart object to the pasted chart (let's me later an easy way to modify it's parameters) Set myChart = curSlide.Shapes.PasteSpecial(ppPasteBitmap, msoFalse) ' can change first parameter to other avaialabe formats : ppPasteGIF, ppPasteEnhancedMetafile, ppPasteOLEObject, etc. ' set different parameters for the pasted chart in PowerPoint slide With myChart .Left = 200 .Top = 200 End With End Sub 

在代码行中:

 Set myChart = curSlide.Shapes.PasteSpecial(ppPasteBitmap, msoFalse) 

您可以将括号中的第一个参数: ppPasteBitmap更改为许多其他可用格式(testing它们并查看哪一个可以给出最佳结果),例如: ppPasteGIFppPasteEnhancedMetafileppPasteOLEObject