2016-08-16 85 views
1

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

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文件,但不知道该如何(这是一个有点冗长粘贴在这里)。谢谢你的帮助。

(注意,此实现在Paste Excel Chart into Powerpoint using VBA非常相似,进一步迷惑我。)

+0

看到我的答案在下面 –

回答

1

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

当您逐步完成代码时,它可以正常工作,但是当您全速运行时,它在粘贴时会出错。

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

有时这会有所帮助:

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

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

2

它看起来像误差可以归因于VBA如何处理在不同的引用变量。 (特别是,PPT VBA如何处理它们)。我可以通过主动选择/复制图表来使宏运行。我需要做更多的研究来弄清为什么变量会导致问题,但至少我知道如何解决这个问题。

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 
1

我喜欢用另一种方法,我喜欢以限定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许多其他avaialble格式(对其进行测试和看哪一个给你最好的结果),例如:ppPasteGIF,ppPasteEnhancedMetafileppPasteOLEObject

相关问题