【问题标题】:VBA Word: Change Data of chartsVBA Word:更改图表数据
【发布时间】:2018-08-30 22:17:54
【问题描述】:

我想更改 Word 文档中图表的数据,但找不到正确的方法来处理我的图表。我尝试了几种技术,但没有任何效果。 (我很想打开一个 ExcelSheet,我可以在其中更改数据)

总而言之:我想更改 MS Word 图表的数据(不是源),如下所示:

编辑(13.8.): 请求后,我尝试为您提供一些“参考代码”以供使用。

Sub ChangeChart()
Dim aktDocument As Document
Dim chrt As Chart
Dim SourceSheet As Excel.Worksheet

Set aktDocument = ActiveDocument    
Set SourceSheet = aktDocument.Shapes(1).Chart.OpenSourceData 'I know it´s not that easy

SourceSheet.Range("B5") = newStuff

aktDocument.Shapes(1).Chart.SetSourceData = SourceSheet

End Sub

我知道这听起来可能很荒谬和荒谬,但我只是不知道如何以正确的方式处理图表,甚至正确地使用它。

编辑(15.08):

即使在重新创建旧图表之后,以下代码也无法找到具有图表的形状。因此,当索引超出范围时它会停止。

Sub Test()
  i = 0
  Do While i < 100
    i = i + 1
      If ActiveDocument.Shapes(i).HasChart Then
         MsgBox "found one!"
      End If
  Loop
End Sub

解决方案(30.08.):

@Cindy Meister 的回答是我的问题的解决方案。在进一步使用它之后,我遇到了问题,即 ChartData 在运行代码时总是在屏幕上打开。

仅供参考,question 是我的解决方法。

【问题讨论】:

    标签: vba charts ms-word


    【解决方案1】:

    所有 Office 应用程序都使用 Excel 引擎来创建和管理图表。在 Word 中,图表可以与文本内嵌或使用文本换行格式进行格式化。在前一种情况下,图表对象需要通过InlineShapes 集合来寻址,在后者中,需要通过Shapes 集合来寻址。

    由于您的示例代码使用Shapes(1),因此我在下面的代码 sn-p 中使用了它。如果不确定文档中的第一个 Shape 是图表,但您已为 Shape 指定了名称,则可以将其用作索引值(例如 Shapes("MyChart")。或者您可以循环使用 Shapes收集并检查HasChart

    如果Shape(或InlineShape)是一个图表,HasChart 返回 True。然后可以将Shape.Chart 设置为对象变量。可以使用Chart.ChartData.Activate 访问图表的数据 - 如果您不使用Activate,当图表的工作表存储在 Word 文档中时,就无法访​​问数据。只有这样Chart.ChartData.Workbook 才能返回一个工作簿对象,并通过它可以使用ActiveSheet 访问工作表。从那时起,就像使用 Excel 对象模型一样。

    Sub ChangeChart()
        Dim aktDocument As Document
        Dim shp As Word.Shape
        Dim chrt As Word.Chart
        Dim wb As Excel.Workbook, SourceSheet As Excel.Worksheet
    
        Set aktDocument = ActiveDocument
        Set shp = aktDocument.Shapes(1)
        If shp.HasChart Then
            Set chrt = shp.Chart
            chrt.ChartData.Activate
            Set wb = chrt.ChartData.Workbook
            Set SourceSheet = wb.ActiveSheet
            SourceSheet.Range("B5").Value2 = newData
        End If
    End Sub
    

    【讨论】:

    • 遗憾的是,我不得不重新创建我想编辑的图表。好像他们只是过时了。但之后,您的解决方案就像一个魅力。谢谢!
    • 很高兴我能帮上忙。那么图表是用 MS Graph 制作的吗?如果您提供信息,我本可以给您代码...
    • 我不知道它们是如何创建的,它们来自我没有创建的旧报告。这就是为什么我很难使用它。
    • 非常抱歉,问题还是没有解决`:D 今天试了个测试代码,里面好像没有带图表的形状,不过应该是不可能的。你能再帮帮我吗?我会将我的代码放入新的编辑中。
    • 图表是否有文字环绕格式?还是它与文本“一致”?如果是后者,您需要 InlineShapes,而不是 Shapes。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多