【问题标题】:PowerPoint 2013 "PasteSpecial" won't embed Excel chart as OLE ObjectPowerPoint 2013“PasteSpecial”不会将 Excel 图表嵌入为 OLE 对象
【发布时间】:2015-05-21 15:44:03
【问题描述】:

我在 PowerPoint 中编写了一个宏,作为其过程的一部分,它将通过复制源 Excel 图表并将复制的图表作为 OLE 对象粘贴到 PowerPoint 演示文稿中的链接图表转换为嵌入式图表——具体命令为“sldComponent.Shapes.PasteSpecial(ppPasteOLEObject)”。

直到今天,这在 2003 到 2010 的所有版本中都运行良好。但是,当尝试在 2013/365 中运行此函数时,我不断收到运行时错误,指出“指定的数据类型不可用”( -2147188160 / 80048240)。我还注意到,在 Microsoft 开发人员参考网页中,“ppPasteOLEObject”不再列为 PasteSpecial 方法的可接受数据类型(与 Shapes 集合一起使用时)。

我找到了几种以编程方式将图表粘贴为图片的方法,但是每当我单击粘贴的图表并尝试访问数据时,我都会不断收到消息“链接的文件不可用”。我希望数据完全独立,以便 PowerPoint 用户可以在不参考原始 Excel 文件的情况下对其进行编辑。有趣的是,当我在错误行停止 PowerPoint 宏,然后手动单击功能区上的“粘贴”时,复制的图表确实粘贴,完全嵌入了可访问的数据,到活动幻灯片中 - 所以图表被复制到剪贴板;由于某种原因,PowerPoint 宏根本无法读取和粘贴。更有趣的是(读作:令人沮丧),PasteSpecial(ppPasteOLEObject) 命令适用于从 Excel 复制的 tables,即单元格区域,但 不适用于图表。

发生了什么?如何使用 PowerPoint 2013 中的 VBA 代码在新版本中嵌入(即在演示幻灯片中插入先前创建的、包含所有数据的独立 Excel 图表)Excel 图表?

添加:我还应该注意,用于从 Excel 中的源工作表获取图表的命令是“xlCopySheet.ChartObjects(1).Select”,然后是“appExcel.Selection.Copy”。选择的 Copy 语法是否没有捕获包括数据在内的整个图表而仅捕获显示的问题?此处使用的正确复制语法是什么?

添加 2:进一步说明:原始宏已保存并在兼容 (97-2003) 模式下与 Excel 和 PowerPoint 一起运行,尽管应用程序本身是 2013/Office 365 版本。

【问题讨论】:

  • “如果我在 Excel 中复制图表并在 PowerPoint VB 即时窗口中使用它....” 什么是“即时窗口”?和普通的 VB 编辑器画面通过 ALT + F11 激活有区别吗?

标签: vba charts excel-2013 powerpoint-2013


【解决方案1】:

如果您将图表粘贴为“Microsoft Office 图形对象”,则该图表将粘贴为 Excel 图表。您可以使用 Excel 功能区的图表工具选项卡在 PowerPoint 中对其进行格式化,该选项卡显示在 PowerPoint 中。如果单击任何编辑/选择数据按钮,则会在 Excel 中打开数据。

如果您将图表粘贴为 Microsoft Excel 图表对象,则会将其粘贴为嵌入式工作簿(整个工作簿,而不仅仅是图表及其数据),并在嵌入式工作簿中插入新图表工作表,并且此图表表是可见的。您需要双击以格式化或编辑图表,这会在 Excel 中打开嵌入的工作簿,并且可能会弄乱嵌入对象的大小(因此它是图表大小的,而不是图表嵌入在工作表中的大小)以及字体大小等。

如果我在 Excel 中复制图表并在 PowerPoint VB 即时窗口中使用它

activepresentation.Slides(3).Shapes.PasteSpecial ppPasteOLEObject 

我得到了第二个行为。

您可能想尝试使用以下方法复制图表:

xlCopySheet.ChartObjects(1).Chart.Copy

【讨论】:

  • 由于 PowerPoint 中 Excel 图表的复杂性,我正在研究一个不会完全复制 Excel 图表的例程,而是在 PowerPoint 中创建一个具有或不具有相同格式的图表,然后找到Excel 图表中使用的 Excel 数据,并将其粘贴到 PowerPoint 数据表中,带有或不带有指向原始 Excel 数据的链接。
  • 您的第一个选项听起来很有希望;我不需要粘贴整个源工作簿,只是为了让数据本身可以以某种方式访问​​。您将在 VBA 中使用什么数据类型与“PasteSpecial”一起将图表粘贴为 Microsoft Office 图形对象?
  • 顺便说一句,使用“ChartObjects(1).Chart.Copy”语法失败;我收到错误消息“图表类的复制方法失败”。
  • 试试 ChartObjects(1).Chart.ChartArea.Copy
  • 如果您使用“ActivePresentation.Slides(1).Shapes.Paste”,您将获得 MSO 图形对象,因为这是粘贴图表的默认格式。请注意,数据保留在原始 Excel 文件中,我认为这是您最初声明的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多