6

在 PowerPoint 2010 或 Word 2010 中,当我选择“插入”->“图表”时,它会为数据创建一个带有 Excel 工作表的新图表。

如果我向 Excel 工作表添加一个宏,当我关闭工作表并重新打开它时,这似乎被丢弃了。

但是,可以一个带有宏的图表,因为我还有一些我在 Office 2003 中创建的 Word 文档和 PowerPoint 演示文稿,其中嵌入了带有宏的 Excel 图表。当我将它们转换为 Office 2010 时,它们看起来就像“正常”的 Office 2010 图表,但保留了宏。

在我看来,当您选择“插入”->“图表”时创建的嵌入式图表是“pptx”格式而不是“pptm”格式,因此不会保存宏。

(如果我查询 ActiveWorkbook.FileFormat,我得到“51”,即“打开 Xml 电子表格”;这确实是“pptx”,而不是“使用宏打开 Xml 电子表格”,即“52”)。

如何插入具有“pptm”行为的图表?或者改变现有图表的行为?


注意:我不想插入图表“对象”,因为这意味着图表在主机应用程序中不可编辑(它只是插入一个 Excel 图表,您需要“打开”才能对其进行编辑)。


让我给你一个先机......我可以通过以下方法实现我想要的:

  1. 在 Word(或 PowerPoint)中创建一个新文档。
  2. 将文档另存为 97-2003 文档(强制它进入兼容模式)。
  3. 使用“插入”->“对象”->“Microsoft Excel 图表”插入图表。这嵌入了一个旧式 Excel 图表。
  4. 通过右键单击->打开打开嵌入图表,并添加一个宏。
  5. 关闭图表,然后选择 File->Info 并使用 Compatibility Mode 的“Convert”按钮将文档转换为 Office 2010 文档。

现在您有了一个“本机”Word 或 PowerPoint 2010 图表,您可以直接在 Word 或 PowerPoint 中对其进行编辑。如果单击图表并选择图表工具->设计->编辑数据,则打开的 Excel 工作表具有您在步骤 4 中创建的宏。成功!

现在,有人有更简单的方法吗?

4

3 回答 3

2

在我看来,您可以通过以下方式实现您所需要的:

(不幸的是,由于我使用的是本地而非英文版的 Office,因此无法用图片和准确的英文命令来呈现它)

  • 选择插入>>对象>>对象...
  • 对象窗口中获取第一页(如Create new
  • 搜索Microsoft Excel 图表(或类似的东西)并按 OK
  • 您将获得包含两张工作表的工作簿,如下图所示

在此处输入图像描述

(功能区上有图表编辑功能)

  • 在图表版本中按 Alt+F11 ,如上图所示。您将打开 IDE for Excel,您将在其中找到合适的工作簿。
  • 在那里添加新模块和宏
  • 现在您可以退出 Word 中的图表编辑并将文档另存为*.docm
  • 重新打开它后,转到图表版(双击)>> Alt+F11 >>你会发现你的宏保存在带有*docm扩展名的工作簿中。
于 2013-06-03T22:25:54.037 回答
1

现在赏金已经通过(没有更好的答案),我将添加我的问题的部分答案,以便能够关闭问题。


  1. 在 Word(或 PowerPoint)中创建一个新文档。
  2. 将文档另存为 97-2003 文档(强制它进入兼容模式)。
  3. 使用“插入”->“对象”->“Microsoft Excel 图表”插入图表。这嵌入了一个旧式 Excel 图表。
  4. 通过右键单击->打开打开嵌入图表,并添加一个宏。
  5. 关闭图表,然后选择 File->Info 并使用 Compatibility Mode 的“Convert”按钮将文档转换为 Office 2010 文档。

现在您有了一个“本机”Word 或 PowerPoint 2010 图表,您可以直接在 Word 或 PowerPoint 中对其进行编辑。如果单击图表并选择图表工具->设计->编辑数据,则打开的 Excel 工作表具有您在步骤 4 中创建的宏。成功!

我仍然有兴趣能够更直接地做到这一点......

于 2013-06-10T13:21:12.597 回答
0

问题在于图表数据在应用程序中的保存方式。转换和起源是两个不同的过程。您的数据系列基本上是一个数组而不是 Excel 表。它只是使用 excel 向您显示数据以供您编辑。如果您不想嵌入 Excel 工作表,则需要将代码保留在 powerpoint/word 模块中并通过形状对象访问图表。

Sub GetChartName()
Dim sSlide As Slide
Dim cChart As Chart
Dim sShape As Shape

Set sSlide = PowerPoint.ActivePresentation.Slides(1)
    For Each sShape In sSlide.Shapes
        If sShape.HasChart Then
            Set cChart = sShape.Chart
                MsgBox cChart.Name
            Set cChart = Nothing
        End If
    Next
Set sSlide = Nothing

End Sub
于 2013-06-04T22:16:39.443 回答