如何将宏添加到Word 2010或PowerPoint 2010图表?

时间:2013-05-29 23:02:11

标签: vba ms-word ms-office powerpoint office-2010

在PowerPoint 2010或Word 2010中,当我选择Insert - >图表,它创建一个新的图表,其中包含数据的Excel工作表。

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

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

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

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

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


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


让我先行一步......我可以通过以下方法实现我的目标:

  1. 在Word(或PowerPoint)中创建新文档。
  2. 将文档另存为97-2003文档(强制它进入兼容模式)。
  3. 使用Insert-> Object-> Microsoft Excel Chart插入图表。这嵌入了一个旧式的Excel图表。
  4. 右键单击 - >打开嵌入式图表,然后添加宏。
  5. 关闭图表,然后选择文件 - >信息,并使用兼容模式“转换”按钮将文档转换为Office 2010文档。
  6. 现在您有一个“本机”Word或PowerPoint 2010图表,您可以直接在Word或PowerPoint中编辑它。如果单击图表并选择图表工具 - >设计 - >编辑数据,则打开的Excel工作表将包含您在步骤4中创建的宏。成功!

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

3 个答案:

答案 0 :(得分:2)

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

(不幸的是,我不能用图片和确切的英文命令来呈现它,因为我使用的是本地而非英文版的Office)

  • 选择插入>>对象>>对象...
  • 对象窗口中取第一页(如新建
  • 搜索 Microsoft Excel图表(或类似内容),然后按 行
  • 您将获得图片中显示的工作簿两张 以下

enter image description here

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

  • 在图表版本中按下Alt + F11    上面的图片。您将在可以找到的地方打开IDE for Excel    适当的工作手册。
  • 在那里添加新模块和宏
  • 现在您可以在Word中退出图表版本并将文档另存为*.docm
  • 重新打开后,转到Chart Edition(双击)>> Alt + F11>> 你会的 通过*docm扩展名找到保存在工作簿中的宏。

答案 1 :(得分:1)

既然赏金已经过去了(没有更好的答案),我会在我的问题中添加部分答案,以便能够结束这个问题。


  1. 在Word(或PowerPoint)中创建新文档。
  2. 将文档另存为 97-2003文档(强制它进入兼容模式)。
  3. 插入 使用Insert-> Object-> Microsoft Excel Chart的图表。这嵌入了一个 旧式Excel图表。
  4. 右键单击打开嵌入式图表 - >打开, 并添加一个宏。
  5. 关闭图表,然后选择文件 - >信息并使用 兼容模式“转换”按钮将文档转换为 Office 2010文档。
  6. 现在您有一个“本机”Word或PowerPoint 2010图表,您可以直接在Word或PowerPoint中编辑它。如果单击图表并选择图表工具 - >设计 - >编辑数据,则打开的Excel工作表将包含您在步骤4中创建的宏。成功!

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

答案 2 :(得分: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