【问题标题】:Exporting resized pictures from Excel to PowerPoint 2010将调整大小的图片从 Excel 导出到 PowerPoint 2010
【发布时间】:2017-08-01 18:42:29
【问题描述】:

我创建了一个将图片从 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

【问题讨论】:

    标签: excel powerpoint powerpoint-2010 vba


    【解决方案1】:

    在 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
    

    【讨论】:

    • 嘿拉多,这太疯狂了!当我应用你写的东西时,它完全正确!非常感谢,祝您有愉快的一天!
    【解决方案2】:

    这似乎是问题所在:

    With PPApp.ActiveWindow.Selection.ShapeRange 
    

    试试:

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

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

    【讨论】:

    • 嗨,这有效,但不适用于我导出的所有图片,但我必须说我前进了一点!我总共需要导出 22 张图片。我每张幻灯片拍一张。我设置 y = 1 并且在循环中我还做了一个简单的微积分 y=y+1 但只有第二张图片被调整大小......这很奇怪,因为所有图片都导出到特定幻灯片没有问题,所以一个循环我有 -> 作品,但它只调整第二张幻灯片的大小......知道为什么吗?当我把 X 而不是 Y 对所有人都不起作用时......
    • 我认为 Shai Rado 做到了。如果他们的解决方案可靠地工作,请不要忘记给他们的答案打勾。不管怎样,很高兴听到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多