簡體   English   中英

如何在MS Word中編寫VBA宏以在表中插入餅形圖

[英]How do write a VBA macro in MS Word to insert a Pie Chart inside a table

我正在嘗試在MS Word中編寫一個VBA宏,該宏創建一個在特定單元格內插入餅狀圖的表格。 餅圖的數據將由宏請求。 以下是我到目前為止所擁有的,但是我很難弄清楚如何在表格內部創建餅圖。

Sub InsertChart()
' Inserts a custom chart

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 if there is more than 1 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, 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

' 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

'Move chart to specific cell
ActiveDocument.Tables(i).Cell(1, 1).Select
Selection.Cut

ActiveDocument.Tables(i).Cell(4, 2).Select
Selection.Paste

ActiveDocument.Tables(i).Cell(1, 1).Range.Text = "Location:"


End Sub

嘗試這個

salesChart.CopyPicture
salesChart.Delete
tbl.Cell(1, 1).Range.Select
Selection.PasteAndFormat (wdChartPicture)
Selection.Tables(1).AutoFitBehavior (wdAutoFitContent)

在最后一個End IfEnd Sub之前添加它

屏幕截圖

在此處輸入圖片說明

我認為將這一行放在End Sub前面就足夠了:

salesChart.Parent.ConvertToInlineShape

它將圖表從形狀轉換為inlineshape,它們將位於表格內部。 我確實測試了它的空文檔,並且可以執行您想要的操作。

您可以稍后添加以下行以自動擬合單元格/列:

ActiveDocument.Tables(1).Columns(1).AutoFit

編輯轉換為表1中的某些單元格。

這樣進行轉換:

Dim InSHP As InlineShape
Set InSHP = salesChart.Parent.ConvertToInlineShape
InSHP.Range.Cut
ActiveDocument.Tables(1).Cell(4, 2).Range.Paste

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM