Vba 将图表从Excel复制到PowerPoint的脚本出错
我试图调用下面的子命令,以便将给定图表复制到指定的PowerPoint演示文稿。但是,当我运行调用此子对象的宏时,下面指示的行返回以下错误:“对象不支持此属性或方法。”奇怪的是,Shapes和Slide都包含调用的方法。此外,位图被正确复制到我的剪贴板,并在调用错误之前粘贴到幻灯片中。您将在下面找到Sub()Vba 将图表从Excel复制到PowerPoint的脚本出错,vba,excel,Vba,Excel,我试图调用下面的子命令,以便将给定图表复制到指定的PowerPoint演示文稿。但是,当我运行调用此子对象的宏时,下面指示的行返回以下错误:“对象不支持此属性或方法。”奇怪的是,Shapes和Slide都包含调用的方法。此外,位图被正确复制到我的剪贴板,并在调用错误之前粘贴到幻灯片中。您将在下面找到Sub() Sub-copyChart(chrt作为图表,pres作为PowerPoint.Presentation) 像幻灯片一样模糊的光标,像幻灯片一样模糊的滑块 设置dummySlide=pre
Sub-copyChart(chrt作为图表,pres作为PowerPoint.Presentation)
像幻灯片一样模糊的光标,像幻灯片一样模糊的滑块
设置dummySlide=pres.Slides(2)'第二张幻灯片是虚拟幻灯片。
设置curSlide=dummySlide.Duplicate(1)'Duplicate dummy,设置为当前幻灯片。
chrt.CopyPicture外观:=xlScreen,格式:=xlBitmap'将图表复制为图片。
curSlide.Shapes.Paste'看起来错误可能是由于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
看起来这个错误可以归因于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
我喜欢使用另一种方法,我喜欢定义一个对象
,然后将其设置为粘贴的图表。之后,在PowerPoint(从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更改为许多其他可用的格式(测试它们并查看哪种格式的效果最好),例如:ppPasteGIF,ppPasteEnhancedMetafile,ppPasteOLEObject,等等。我喜欢使用另一种方法,我想定义一个对象
,然后将其设置为粘贴的图表。之后,在PowerPoint(从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更改为许多其他可用的格式(测试它们并查看哪种格式的效果最好),例如:ppPasteGIF,ppPasteEnhancedMetafile,ppPasteOLEObject,等等。我在最新版本的Office中遇到了很多麻烦。2003年和更早的时候没有这个问题,2007年和2010年有一点,2013年和2016年有一点
当您单步执行代码时,它工作正常,但当您全速运行它时,它会在粘贴时出错
这就好像拷贝没有时间完成一样,所以当你粘贴剪贴板时,它没有任何东西要粘贴
有时这有助于:
chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
DoEvents
curSlide.Shapes.Paste
DoEvents
告诉VBA在后台操作有机会完成时等待。在最新版本的Office中,我遇到了很多麻烦。2003年和更早的时候没有这个问题,2007年和2010年有一点,2013年和2016年有一点
当您单步执行代码时,它工作正常,但当您全速运行它时,它会在粘贴时出错
这就好像拷贝没有时间完成一样,所以当你粘贴剪贴板时,它没有任何东西要粘贴
有时这有助于:
chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
DoEvents
curSlide.Shapes.Paste
DoEvents
告诉VBA等待后台操作有机会完成。请参阅下面的我的答案请参阅下面的我的答案