【问题标题】:Copy/paste Excel charts to PowerPoint Error将 Excel 图表复制/粘贴到 PowerPoint 错误
【发布时间】:2020-12-21 16:23:48
【问题描述】:

我正在尝试在 Excel 工作簿中获取 60 个图表并将它们粘贴到 PowerPoint。在我们转换为 Office 365 之前,它一直运行良好。现在我收到一个错误

指定的数据类型不可用

代码如下:

copy_chart "318Pivot", "cht404_318", 3

Public Function copy_chart(sheet, chart, slide)
Dim oshp As Shape
Dim PPApp As Object
Dim PPPres As Object
Dim PPSlide As Object
Dim PPShape As Object

Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide
PPApp.ActiveWindow.View.GotoSlide (slide)

Worksheets(sheet).Activate
ActiveSheet.ChartObjects(chart).chart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture

Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)

' paste and select the chart picture
PPSlide.Shapes.PasteSpecial DataType:=ppPasteJPG  '**This is where it errors out**

'With PPShape
For j = 1 To PPSlide.Shapes.Count
With PPSlide.Shapes(j)
    If .Type = msoPicture Then
        .LockAspectRatio = False
        .Height = 5# * 72
        .Width = 10# * 72
        .Left = 0# * 72
        .Top = 1.5 * 72
    End If
End With
Next j
DoEvents

' Clean up
Set PPSlide = Nothing
Set PPPres = Nothing
Set PPApp = Nothing
Set PPShape = Nothing

End Function

以前效果很好。我尝试过ppPasteDefault 和ppPasteEnhancedMetafile,但它们都使 PowerPoint 文件 >30 MB。在它工作之前,它是 3 MB。

有谁知道为什么我突然不能再使用 ppPasteJPG 以及如何更正代码?

【问题讨论】:

  • ppPastePNG 呢?
  • 尝试单步调试代码,看看是否会产生同样的错误。
  • ppPastePNG 并单步执行代码给了我相同的结果。快把我逼疯了!!

标签: excel vba charts powerpoint


【解决方案1】:

如果你不使用早期绑定,Excel VBA 将不知道 ppPasteJPG 是什么意思。但是 ppPasteJPG 只是一个命名常量,值为 5。所以替换

PPSlide.Shapes.PasteSpecial DataType:=ppPasteJPG

与

PPSlide.Shapes.PasteSpecial DataType:=5

【讨论】:

  • PPSlide.Shapes.PasteSpecial DataType:=5 也不起作用。
  • Office 365 中是否有任何引用发生了变化?顺便说一句,此代码是从 Access 运行的,因为 Excel 数据是从 Access 生成的。不确定这是否会有所不同。
  • 我再次浏览它只是为了在粘贴之前查看剪贴板上的内容。所以在 CopyPicture 之后,我手动去 PowerPoint 做一个 PasteSpecial 并且仅有的两个选项是图片(增强的图元文件)和图片(Windows 图元文件)。为什么这些是唯一的选择?现在我可以看到为什么 PNG 和 JPG 的错误,只是不知道如何纠正。
  • 您的代码使用CopyPicture 类型为xlPicture,因此粘贴类型仅允许元文件。如果你使用了xlBitmap 类型,你可以使用JPG。在大多数情况下,PNG 比 JPG 提供更好的视觉效果。抱歉,我之前错过了。
【解决方案2】:

让它工作。发现由于某种原因复制行实际上并未复制图表。不知道为什么复制 ChartArea 有效而复制 Chart 无效。

'ActiveSheet.ChartObjects(chart).chart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
Worksheets(sheet).Activate
ActiveSheet.ChartObjects(chart).Activate
ActiveChart.ChartArea.Copy
' test to see if the clipboard is empty

Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)

' paste and select the chart picture
PPSlide.Shapes.PasteSpecial DataType:=ppPasteJPG

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2014-10-15
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多