【发布时间】:2014-10-15 12:42:00
【问题描述】:
下面的 Sub 应该将 Excel 图表粘贴到新创建的 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
Error http://im64.gulfup.com/pZNwxJ.png
我尝试了pptSlide.Shapes.Paste,但它给出了同样的错误。
当我将pptApp.Presentations.Add(msoFalse) 修改为pptApp.Presentations.Add 时,它只能工作,但会显示 PowerPoint 应用程序。
当我更改为.PasteSpecial DataType:=ppPasteEnhancedMetafile 或.PasteSpecial DataType:=ppPastePNG 时,即使使用.Add(msoFalse),一切也会顺利进行。
我认为这可能与设置焦点有关。
【问题讨论】:
-
@DavidZemens Nope
.Chart.Export FileName:="C:\Users\xyz\Desktop\1.png, FilterName:="PNG"可以正常工作。然而,在 Excel 2007 SP3 中,使用这种方法生成的图表图像质量非常差。出于某种原因,当粘贴它并从 PowerPoint 中保存时,它会好很多,这也是我采用上述方法的原因。 -
尝试
pptApp.CommandBars.ExecuteMso "PastePng"方法而不是PasteSpecial。 -
@DavidZemens
pptApp.CommandBars.ExecuteMso "PastePng"给出了对象“_CommandBars”的方法“ExecuteMso”失败。还有一种工作方法可以粘贴图表本身而不是将其粘贴为 PNG? -
见THIS直接粘贴图表。
-
@DavidZemens 感谢您的链接;但尝试
pptApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting"失败,对象'_CommandBars' 的方法'ExecuteMso' 失败。这是我的样本表的链接:db.tt/nGrgF5bA
标签: excel vba powerpoint