简体   繁体   English

如何使用VBA在MS Word中的表格中的特定单元格中嵌入图表

[英]How do I Embeded an Chart in a Specific Cell in a table in MS Word with VBA

I am trying to embeded a chart in a specific cell in a table. 我试图将图表嵌入表中的特定单元格中。 The only way I have been able to get it to work is using selection.cut and paste. 我能够使其正常工作的唯一方法是使用selection.cut和粘贴。 This doesn't work after second and third run. 在第二次和第三次运行后,此方法不起作用。 This what I have so far: 这是我到目前为止所拥有的:

   Dim data1 As Variant
data1 = InputBox("What was the Moving Water damage value (enter as 0.0 - 1.0).")

Dim data2 As Variant
data2 = InputBox("What was the Settlement damage value (enter as 0.0 - 1.0).")

Dim data3 As Variant
data3 = InputBox("What was the Pre-Exisiting damage value (enter as 0.0 - 1.0).")


Dim i As Integer

i = ActiveDocument.Tables.Count
i = i + 1

' Create table
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:=2
ActiveDocument.Tables(i).Cell(1, 2).Split NumColumns:=3
ActiveDocument.Tables(i).Cell(1, 1).Range.Text = "Location:"
ActiveDocument.Tables(i).Cell(1, 3).Range.Text = "Quantity (Measurable Area):"
ActiveDocument.Tables(i).Cell(2, 1).Range.Text = "Description:"
ActiveDocument.Tables(i).Cell(3, 1).Range.Text = "Analysis:"
ActiveDocument.Tables(i).Cell(4, 1).Range.Text = "Cause(s) of Damage:"
ActiveDocument.Tables(i).Cell(5, 1).Range.Text = "Recommended Repairs:"

With ActiveDocument.Tables(i)
    .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
    .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
    .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
    .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
    .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
    .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
End With

Dim small As Boolean
small = False
Dim twoSeries As Boolean
twoSeries = False
Dim pieChart As Boolean
pieChart = True

Dim salesChart As Chart
Dim chartWorkSheet As Excel.Worksheet


With ActiveDocument.Tables(i)
    .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
    .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
    .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
    .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
    .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
    .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
End With

With ActiveDocument.Tables(i).Cell(4, 2).Range
    ActiveDocument.Range(.Start, .Start).Select
End With

' Add in a new chart
Set salesChart = ActiveDocument.InlineShapes.AddChart.Chart
Set chartWorkSheet = salesChart.ChartData.Workbook.WorkSheets(1)

' Resize the chart area
chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:B4")

' Rename Series 1 as Sales
chartWorkSheet.Range("Table1[[#Headers],[Series 1]]").FormulaR1C1 = "Damage"

' Add data to the chart
chartWorkSheet.Range("A2").FormulaR1C1 = "Moving Water"
chartWorkSheet.Range("A3").FormulaR1C1 = "Settlement"
chartWorkSheet.Range("A4").FormulaR1C1 = "Pre-Exisiting"
chartWorkSheet.Range("B2").FormulaR1C1 = data1
chartWorkSheet.Range("B3").FormulaR1C1 = data2
chartWorkSheet.Range("B4").FormulaR1C1 = data3


' Quit Excel, since we no longer need it
salesChart.ChartData.Workbook.Application.Quit

' Put a box around the legend
salesChart.Legend.Format.Line.Visible = msoCTrue

' Fill the background with theme color accent 1
With salesChart.ChartArea.Format.Fill
    .Visible = msoTrue
    .Solid
    .ForeColor.ObjectThemeColor = wdThemeColorAccent1
End With

' Add a title and format it
salesChart.HasTitle = True
With salesChart.ChartTitle
    .Characters.Font.Italic = True
    .Characters.Font.Size = 18
    .Characters.Font.color = RGB(0, 0, 100)
    .Text = "Damage"
End With


If small Then
' Size and move the chart
With salesChart.Parent
    .Left = 100
    .Width = 300
    .Height = 150
End With
End If

If pieChart Then
' Set chart type
    salesChart.ChartType = xl3DPie
End If

To place your chart within cell(4,2) you need to select Range within this cell. 要将图表放置在单元格(4,2)中,您需要选择此单元格中的范围。 Therefore add this code within your code before you add chart to your document: 因此,在将图表添加到文档之前,请在代码中添加以下代码:

'....your code here

'<-- new code --
    'select destination cell
    With ActiveDocument.Tables(i).Cell(4, 2).Range
        ActiveDocument.Range(.Start, .Start).Select
    End With
'-- new code -->

'your code...
' Add in a new chart
Set salesChart = ActiveDocument.InlineShapes.AddChart.Chart
Set chartWorkSheet = salesChart.ChartData.Workbook.WorkSheets(1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM