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

问题描述 投票:0回答:1

[有时,您需要在Excel中复制图表,然后使用VBA将其粘贴到PowerPoint演示文稿中。当您要自动执行报告时,这很方便。

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

这个问题很烦人,但我的愚见实际上是一个错误。除了John Peltier的answer的潜在例外,我还没有看到针对SO问题的可靠解决方案。他的答案很可能是正确的(并且已在线程上被指定为此类),但不幸的是,我无法在我的实现中使用它。

我在下面列出的问题。

代码(为便于参考,对其进行了简化):

   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
excel vba powerpoint
1个回答
1
投票

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

我发现的解决方案是在代码粘贴图表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
© www.soinside.com 2019 - 2024. All rights reserved.