使用常规MS Word表在MS Word中创建图表

时间:2011-10-01 18:05:43

标签: vba ms-word word-vba

我正在开发一个可以生成包含表格的MS Word文件的程序。

我想设计一个宏来获取MS Word文件中包含的表格中的数据并从中创建图表(条形图,饼图或折线图)。

到目前为止,我已经能够:

  1. 选择我需要的源数据部分,
  2. 将内联Excel工作表插入MS Word文件。
  3. 但是,我无法将表格的选定部分粘贴到内联工作表中以绘制图表。

    我该怎么做?

1 个答案:

答案 0 :(得分:4)

下面的解决方案适用于Word 2007 SP2和Word 2010.它基于Peter Gruenbaum撰写的题为“在Word 2010中使用VBA创建图表”的精彩文章中的代码,可在此处阅读:

Creating Charts with VBA in Word 2010

重要的是要注意,要使此VBA代码正常工作,它应该包含对Microsoft Excel 14.0对象库的引用(对于那些不知道如何执行此操作的文章,上面链接的文章解释了如何添加这个参考详细)。

Sub MakeChartFromTable()

Dim myTable As Table
Dim salesChart As Chart
Dim chartWorkSheet As Excel.Worksheet
Dim x As Integer
Dim RowCount As Integer
Dim ColumnCount As Integer
Dim LastColumn As String

For Each myTable In ActiveDocument.Tables
    myTable.Range.Copy
    'Create Chart
    Set salesChart = ActiveDocument.Shapes.AddChart.Chart
    Set chartWorkSheet = salesChart.ChartData.Workbook.Worksheets(1)
    'Determine size of table
    RowCount = myTable.Rows.Count
    ColumnCount = myTable.Columns.Count
    'Determine spreadsheet column letter for last column of table
    If ColumnCount < 26 Then
        LastColumn = Chr(64 + 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 chartWorkSheet
        .ListObjects("Table1").DataBodyRange.Delete
        .ListObjects("Table1").Resize chartWorkSheet.Range("A1:" & LastColumn & RowCount)
        .Range("A1:" & LastColumn & RowCount).Select
        .Paste
    End With
    salesChart.ChartData.Workbook.Close
Next

End Sub

此代码从整个Word表格创建图表,因此需要合并您的代码以选择部分表格(如问题中所示)。还需要其他代码来将图表定位在Word文档中。希望这会有所帮助。