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

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

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

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

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

(如果查询ActiveWorkbook.FileFormat,我会得到“51”,即“Open Xml Spreadsheet”;这确实是“pptx”,与“Open Xml Spreadsheet with Macros”相反,即“52”)。

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


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


让我给你一个开始......我可以通过以下方法达到我想要的效果:

  • 在Word(或PowerPoint)中创建一个新文档。
  • 将文档保存为97-2003文档(强制它进入兼容模式)。
  • 使用插入 - >对象 - > Microsoft Excel图表插入图表。 这嵌入了一个旧式的Excel图表。
  • 通过右键单击 - >打开嵌入的图表,并添加一个宏。
  • 关闭图表,然后选择File-> Info并使用兼容模式“Convert”按钮将文档转换为Office 2010文档。
  • 现在您拥有了一个“原生”Word或PowerPoint 2010图表,您可以直接在Word或PowerPoint中进行编辑。 如果您单击图表并选择图表工具 - >设计 - >编辑数据,则打开的Excel工作表中包含您在步骤4中创建的宏。成功!

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


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

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

  • 选择插入>>对象>>对象...
  • 对象窗口中取第一页(如新建
  • 搜索Microsoft Excel图表 (或类似的东西),然后按确定
  • 您将获得两张工作簿,如下图所示
  • 在这里输入图像描述

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

  • 按照上图中的图表版本, 按Alt + F11 。 您将获得IDE for Excel打开的位置,您将找到相应的工作簿。
  • 在那里添加新的模块和宏
  • 现在,您可以在Word中退出图表编辑并将文档另存为*.docm
  • 在你重新打开它之后 ,进入图表版(双击)>> Alt + F11 >> 你会发现你的宏保存在*docm扩展名的工作簿中。

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


  • 在Word(或PowerPoint)中创建一个新文档。
  • 将文档保存为97-2003文档(强制它进入兼容模式)。
  • 使用插入 - >对象 - > Microsoft Excel图表插入图表。 这嵌入了一个旧式的Excel图表。
  • 通过右键单击 - >打开嵌入的图表,并添加一个宏。
  • 关闭图表,然后选择File-> Info并使用兼容模式“Convert”按钮将文档转换为Office 2010文档。
  • 现在您拥有了一个“原生”Word或PowerPoint 2010图表,您可以直接在Word或PowerPoint中进行编辑。 如果您单击图表并选择图表工具 - >设计 - >编辑数据,则打开的Excel工作表中包含您在步骤4中创建的宏。成功!

    我仍然希望能够更直接地做到这一点......


    问题在于如何在应用程序中保存图表数据。 转换和发起是两个不同的过程。 你的数据系列基本上是一个数组而不是Excel表格。 它只是使用Excel来显示数据给你编辑。 如果您不想嵌入Excel工作表,您需要将代码保存在模块中,以获得powerpoint / word并通过shapes对象访问图表。

    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
    
    链接地址: http://www.djcxy.com/p/45677.html

    上一篇: How can I add a macro to a Word 2010 or PowerPoint 2010 chart?

    下一篇: Close Powerpoint Object with Excel VBA (NOT using Powerpoint.Application)