将调整大小的图片从 Excel 导出到 PowerPoint 2010

Exporting resized pictures from Excel to PowerPoint 2010

我创建了一个代码,可以将图片从 Excel 复制到新的 PowerPoint 演示文稿中。该代码适用于 MS Office 2016,但 不适用于 MS Office 2010。特别是,导出到 PowerPoint 的图片不会在 .pptx 2010 中调整大小。

我该如何解决这个问题?

这是在 MS 2010 中不起作用的有问题的代码段:

    Application.Goto Reference:="Full_Account_Performance"
    Application.CutCopyMode = False
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    PPPres.Slides(x).Shapes.PasteSpecial

    On Error Resume Next                
    With PPApp.ActiveWindow.Selection.ShapeRange 
        .ScaleHeight 0.435, msoFalse, msoScaleFromTopLeft 
        'Powerpoint 2010 ingnors it... but in 2016 it is fine
        .Left = 10
        .Top = 55
    End With

这似乎是问题所在:

With PPApp.ActiveWindow.Selection.ShapeRange 

尝试:

With PPPres.Slides(x).Shapes(y)

其中 y = 您刚刚粘贴的图片。由于您没有设置对它的引用,您可能需要遍历幻灯片中的形状才能找到它是哪个形状。

在 PowerPoint 2010 中,使用 Shapes.PasteSpecial 命令粘贴图片后有时会跳过这些行(它们不会被跳过,只是代码在完成粘贴图片之前运行它们)。

有一个解决方法,您可以添加一秒钟的延迟,代码将起作用(不会跳过下面的行)。

下面的代码将在 PowerPoint 中为粘贴的图片设置一个 Object,稍后只需修改 myShape 属性。

注意:下面的代码使用了后期绑定,但它也适用于早期绑定.

代码

Dim PPPres                              As Object
Dim PPSlide                             As Object
Dim myShape                             As Object

' set the slide object - x is the slide number
Set PPSlide = PPPres.Slides(x)  

' Set an Object to the Pasted PowerPoint picture
Set myShape = PPSlide.Shapes.PasteSpecial(0, msoFalse) ' ppPasteDefault = 0
With myShape
    ' it skips the lines below, add a delay
    Application.Wait Now + TimeValue("00:00:01")

    .ScaleHeight 0.435, msoFalse, msoScaleFromTopLeft
    .Left = 10
    .Top = 55
End With