Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用从常规MS Word表格创建MS Word图表_Vba_Ms Word - Fatal编程技术网

Vba 使用从常规MS Word表格创建MS Word图表

Vba 使用从常规MS Word表格创建MS Word图表,vba,ms-word,Vba,Ms Word,我正在开发一个可以生成包含表格的MS Word文件的程序 我想设计一个宏,它将获取MS Word文件中包含的表中的数据,并从中创建一个图表(条形图、饼图或折线图) 到目前为止,我已经能够: 选择表中我需要的源数据部分 将内嵌Excel工作表插入MS Word文件 但是,我无法将表的选定部分粘贴到内联工作表中以绘制图表 我如何才能做到这一点?以下解决方案适用于Word 2007 SP2和Word 2010。它基于Peter Gruenbaum在一篇题为“在Word 2010中使用VBA创建图表”的

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

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

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

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


    我如何才能做到这一点?

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

    请务必注意,要使此VBA代码正常工作,它应该包含对Microsoft Excel 14.0对象库的引用(对于不知道如何执行此操作的用户,上面链接的文章详细说明了如何添加此引用)

    子MakeChartFromTable()
    把我的桌子调暗为桌子
    将销售图表设置为图表
    将图表工作表设置为Excel。工作表
    作为整数的Dim x
    将行计数设置为整数
    Dim ColumnCount为整数
    将最后一列设置为字符串
    对于ActiveDocument.Tables中的每个myTable
    myTable.Range.Copy
    '创建图表
    设置salesChart=ActiveDocument.Shapes.AddChart.Chart
    设置chartWorkSheet=salesChart.ChartData.Workbook.Worksheets(1)
    '确定表的大小
    RowCount=myTable.Rows.Count
    ColumnCount=myTable.Columns.Count
    '确定表格最后一列的电子表格列字母
    如果ColumnCount<26,则
    LastColumn=Chr(64+列计数)
    其他的
    LastColumn=Chr(Int(ColumnCount/26)+64)和Chr(ColumnCount Mod 26)+64)
    如果结束
    '将图表数据区域调整为表格大小并粘贴表格数据
    使用图表工作表
    .ListObjects(“表1”).DataBodyRange.Delete
    .ListObjects(“Table1”)。调整图表工作表的大小。范围(“A1:”&LastColumn&RowCount)
    .Range(“A1:&LastColumn&RowCount”)。选择
    粘贴
    以
    salesChart.ChartData.Workbook.Close
    下一个
    端接头
    

    这段代码从整个单词表中创建图表,因此需要合并选择部分表的代码(如问题中所示)。在Word文档中定位图表还需要附加代码。希望这有帮助。

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

    请务必注意,要使此VBA代码正常工作,它应该包含对Microsoft Excel 14.0对象库的引用(对于不知道如何执行此操作的用户,上面链接的文章详细说明了如何添加此引用)

    子MakeChartFromTable()
    把我的桌子调暗为桌子
    将销售图表设置为图表
    将图表工作表设置为Excel。工作表
    作为整数的Dim x
    将行计数设置为整数
    Dim ColumnCount为整数
    将最后一列设置为字符串
    对于ActiveDocument.Tables中的每个myTable
    myTable.Range.Copy
    '创建图表
    设置salesChart=ActiveDocument.Shapes.AddChart.Chart
    设置chartWorkSheet=salesChart.ChartData.Workbook.Worksheets(1)
    '确定表的大小
    RowCount=myTable.Rows.Count
    ColumnCount=myTable.Columns.Count
    '确定表格最后一列的电子表格列字母
    如果ColumnCount<26,则
    LastColumn=Chr(64+列计数)
    其他的
    LastColumn=Chr(Int(ColumnCount/26)+64)和Chr(ColumnCount Mod 26)+64)
    如果结束
    '将图表数据区域调整为表格大小并粘贴表格数据
    使用图表工作表
    .ListObjects(“表1”).DataBodyRange.Delete
    .ListObjects(“Table1”)。调整图表工作表的大小。范围(“A1:”&LastColumn&RowCount)
    .Range(“A1:&LastColumn&RowCount”)。选择
    粘贴
    以
    salesChart.ChartData.Workbook.Close
    下一个
    端接头
    
    这段代码从整个单词表中创建图表,因此需要合并选择部分表的代码(如问题中所示)。在Word文档中定位图表还需要附加代码。希望这有帮助

    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