Word VBA 在每页上创建图表

Word VBA Create chart on each page

我在学区工作。我们需要给学生缺勤的家长写信。 Excel 文档中的数据已用于创建邮件合并。 从 Excel 文档中,我将 3 个字段拉入 "hidden table" 学生姓名、中位数缺勤和学生缺勤。 隐藏的 table 只是一个无边框的 table,每页都有白色文本。 (白色,所以不会打印) table 用于使用以下代码生成图表;

Dim tblOne As Table
Dim cht As Chart
Dim chtWkSht As Excel.Worksheet
Dim X As Integer
Dim RowCount As Integer
Dim ColumnCount As Integer
Dim LastColumn As String



For Each tblOne In ActiveDocument.Tables
    tblOne.Range.Copy
   'Create Chart
    Set cht = ActiveDocument.InlineShapes.AddChart.Chart


    Set chtWkSht = cht.ChartData.Workbook.Worksheets(1)   
'Set table size
    RowCount = tblOne.Rows.Count
    ColumnCount = tblOne.Columns.Count
'Determine Spreadsheet column letter for lastColumnTable
    If ColumnCount < 26 Then
        LastColumn = Chr(62 + ColumnCount)
    Else
     LastColumn = Chr(Int(ColumnCount / 26) + 64) & Chr((ColumnCount Mod 26) + 64)
   End If
 'Resize chart data area to table size and paste table data
    With chtWkSht
        .ListObjects("Table1").DataBodyRange.Delete
        .ListObjects("Table1").Resize chtWkSht.Range("A1:" & LastColumn & RowCount)
        .Range("A1:" & LastColumn & RowCount).Select
       .Paste
    End With

    cht.ChartData.Workbook.Close
Next

这确实会为每个学生生成一个图表,但它会生成第一页上的所有图表。 我需要图表显示在每个学生对应的页面上。 我是 VBA 的新手。我不确定最好的方法是否是在 table 中创建图表或者使用书签?

或使用 "hidden table" 上的数据更新每个页面上的现有图表。

无论哪种情况,我都不确定如何处理。 我所知道的是,使用带有邮件合并选项的隐藏 table 已经为每个学生创建了带有正确信息的单独 table。这就是我采用这种方法的原因。

任何 suggestions/Help 将不胜感激,因为替代方法是手动更新这些。

谢谢

Word 没有页面对象,它们的显示是动态生成的。要创建新页面,请在每次插入图表的末尾插入分页符:

Selection.InsertBreak Type:=wdPageBreak

将 "hidden tables" 格式化为白色文本 Word 不是最佳选择。这不仅使编辑文档变得更加困难,而且还没有真正隐藏 table,因为 Word 仍会指示打印机打印它,从而导致空白区域并可能打印额外的页面。更好的选择是将字体属性更改为隐藏。这将使编辑更容易,因为可以在屏幕上查看文本并从打印机说明中排除 table。

图表出现在第一页是因为您没有告诉 Word 您希望图表放置的位置。因此,Word 只是将图表插入文档的开头。

您需要评估您的文档以找到放置图表的合适位置。如果每个字母都包含 table 和图表数据,那么您可以相对于该图表定位图表,最好是 table.

之前或之后的空段落
For Each tblOne In ActiveDocument.Tables
    tblOne.Range.Copy
    'get chart location
    Dim chtRange as Range
    set chtRange = tblOne.Range
    'to place chart before table
    chtRange.Collapse wdCollapseStart
    chtRange.Move wdParagraph, -1
    'to place chart after table
    'chtRange.Collapse wdCollapseEnd
    'chtRange.Move wdParagraph, 1
    'Create Chart
    Set cht = ActiveDocument.InlineShapes.AddChart2(Range:=chtRange).Chart

编辑:既然我有机会在我的 PC 上测试它,我已经更改了最后一行并可以确认代码是否有效。当我使用 Office 365 时,我使用了 AddChart2 方法。已弃用的 AddChart 方法的工作方式相同。