【问题标题】:Macro Excel won't past exact image to Powerpoint Presentation宏 Excel 不会将精确图像粘贴到 Powerpoint 演示文稿
【发布时间】:2017-11-15 16:29:43
【问题描述】:

我在 Excel 中的宏发生了最奇怪的事情。它就像一个魅力,但是当它必须复制 2 个图表并粘贴到我的 powerpoint 演示文稿中时,突然间,图表并不完全相同。

我的代码:

Set Wb = Workbooks.Open("Path\WbName.xlsx", ReadOnly:=True, UpdateLinks:=0) 

它会再打开 5 个工作簿...然后它会循环,复制所有图表

Dim Charts_Arr As Variant
    Charts_Arr = Worksheets("Parameters").ListObjects("Parameters").DataBodyRange.Value

For i = LBound(Charts_Arr) To UBound(Charts_Arr)
    SourcePath = Charts_Arr(i, 8)
    SheetName = Charts_Arr(i, 4)
    ShapeNr = Charts_Arr(i, 2)
    SlideNr = Charts_Arr(i, 3)
    Schaling = Charts_Arr(i, 6)

    Set Source = Workbooks(SourcePath)
    Set PPpres = oPPTApp.ActivePresentation
    Set Sh = Source.Sheets(SheetName).Shapes(ShapeNr)


    Sh.Copy


    Set NewSh = PPpres.Slides(SlideNr).Shapes.PasteSpecial(ppPasteJPG)
    With NewSh
      .Top = Charts_Arr(i, 5)
      .Left = Charts_Arr(i, 7)
      .ScaleHeight Schaling, msoTrue
    End With

Next i

这很完美。但是当我查看 ppt 文件时,2 个图表并不完全相同。

(提示:Excel 是 Chartarea,而不是形状 - 一开始并不知道)

当手动复制图片时,我得到了正确的图片:

更奇怪的是,我在同一个工作簿的另一个工作表上还有另外 2 个图表,它们没有引起任何问题。

这可能是链接的问题,还是我复制的方式有问题?

更新

如果我按照以下建议调整代码:

 Source.Sheets(SheetName).ChartObjects(ShapeNr).Chart.CopyPicture
        Set NewSh = PPpres.Slides(SlideNr).Shapes.Paste
            With NewSh
                        .Top = Charts_Arr(i, 5)
                        .Left = Charts_Arr(i, 7)
                        .ScaleHeight Schaling, msoTrue
            End With  

我明白了:

我猜我在代码的粘贴部分做错了。 尝试了其他可能性,最终总是没有图像,或者上面的那个。

FIXERSUPDATE

所以我制造/利用了一个漏洞。找不到将图像直接粘贴到 Powerpoint 中的方法,所以我将其粘贴到 excelsheet 'Temp' 中。并调整了阵列,这似乎奏效了。但我仍然想知道如何直接在 Powerpoint 中执行此操作。

提前感谢您的见解!

【问题讨论】:

  • 您有与粘贴的图表相匹配的图表吗?
  • 你试过用copypicture方法复制图表吗? Wb.Sheet1.ChartObjects(1).Chart.CopyPicture 其中 1 是图表的索引。而不是jpg,其他粘贴特殊数据类型?
  • @TimWilliams Picture Nr 1 是宏之后的结果,Picture Nr 2 是原始图表。
  • @danieltakeshi 我更新了,求小费!
  • @Nathalii。不幸的是,我没有将 VBA 用于 PowerPoint,但是,即使我尝试手动复制/粘贴一些图表,它似乎也无法格式化。也许两个程序之间存在一些问题。让我们尝试粘贴另一种数据类型,例如Set NewSh = PPpres.Slides(SlideNr).Shapes.Paste ppPasteEnhancedMetafileSet NewSh = PPpres.Slides(SlideNr).Shapes.Paste ppPasteMetafilePicture。其他数据类型请参考this

标签: vba excel charts powerpoint


【解决方案1】:

我找不到可以解决此问题的 PasteSpecial 选项。 CopyasPicture 有效,但我似乎无法弄清楚如何将其直接粘贴到 ppt 中。所以我使用了一种解决方法。我创建了一个“临时”表,我可以在其中以正确的格式将图表粘贴为图片,然后我可以对其进行编程以将形状粘贴到 Ppt 中。不是解决问题的最干净的方法,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多