在将图表从Excel粘贴到Powerpoint之前,该过程将继续



有时,您需要在Excel中复制图表并使用VBA将其粘贴到PowerPoint演示文稿中。当您想要自动生成报告时,这会派上用场。

问题:假设您没有将图形转换为图像,并且根据您尝试粘贴的图形的大小和复杂性,在 VBA 尝试继续该过程之前,图形没有时间粘贴。当您想在粘贴图形后对其进行操作(例如将其放置在幻灯片上(时,这很烦人。实际上发生的事情是你最终试图在幻灯片上移动图表......尚未作为PowerPoint形状"存在"。

这个问题很烦人,以我的拙见实际上构成了一个错误。我还没有看到SO问题的可靠解决方案,除了John Peltier的这个答案。他的答案很可能是正确的(并且已在线程上被指定为这样(,但不幸的是,我无法在我的实现中使其正常工作。

我在下面列出的问题。

代码(为便于参考而简化(:

Public Sub X2P()           
'Copy chart and paste
ActiveChart.ChartArea.Copy
Set mySlide = myPresentation.Slides(2)    
PasteChartIntoSlide mySlide    
End Sub
Function PasteChartIntoSlide(theSlide As Object) As Object    
CreateObject("PowerPoint.Application").CommandBars.ExecuteMso ("PasteSourceFormatting")            
End Function

我看到其他人试图分解脚本并使用单独的函数复制、粘贴和定位图表。这更干净,但它对我不起作用。

我找到的解决方案是在代码粘贴图表之前计算幻灯片上的形状数,num_obj,并将变量num_obj_final设置为num_obj + 1(即粘贴图表后的形状总数(。然后,我在粘贴事件之后创建一个循环,每次迭代都会重新计算num_obj。仅当num_obj等于num_obj_final时,该过程才会退出循环。然后脚本可以按预期恢复,因为您可以确定该形状现在"存在于"幻灯片上。

PasteChartIntoSlide(( 函数的最终代码:

Function PasteChartIntoSlide(theSlide As Object) As Object
theSlide.Select
num_obj = 0
num_obj_final = theSlide.Shapes.Count + 1
CreateObject("PowerPoint.Application").CommandBars.ExecuteMso ("PasteSourceFormatting")
DoEvents
Do Until num_obj = num_obj_final
num_obj = theSlide.Shapes.Count
'Debug.Print num_obj
Loop
End Function

最新更新