我与PivotCharts合作很多,但VBA体验绝对没有。我有excel模板上传到数据库,然后可以作为报告下载与该数据库中的数据。我在一张纸上有一个pivotTable / PivotChart组合。有时表有5行数据,有时有1200行数据,具体取决于数据库,时间帧等。
我想做的是,图表占用的行数与表格+ 3的高度相同,并且始终显示在D3:J3中的宽度和起始位置。这使数据与图表保持一致。
我找到了类似的?从去年开始:Resize pivot chart when selecting different less/more values它没有给我任何结果(或者我做错了什么)。
相关信息:表格/图表在Sheet4(“摘要”)上,在数据透视表选项下,它被称为“IdleSummary”。
感谢您提供任何帮助,谢谢!
答案 0 :(得分:1)
一种方法是使用范围对象来调整图表的大小:
Sub test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Summary")
Dim vPiv As PivotTable
Dim vRowCount As Long
Dim graphSizer As Range
Dim theChart As ChartObject
Set vPiv = ws.PivotTables("IdleSummary")
vRowCount = ws.Range(vPiv.TableRange2.Address).Rows.Count + 3
Set graphSizer = ws.Range("D3:J" & vRowCount)
Set theChart = ws.ChartObjects.Add(Left:=graphSizer.Left, Top:=graphSizer.Top, Width:=graphSizer.Width, Height:=graphSizer.Height)
With theChart.Chart
.SetSourceData vPiv.TableRange2
.ChartType = xlArea 'replace with desired chartType
End With
End Sub
编辑,回答评论: 修改上面的代码,并使用工作表PivotTableUpdate事件,你可以这样做:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
If Target.Name = "IdleSummary" Then
Call Resize
End If
End Sub
Sub Resize()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Summary")
Dim vPiv As PivotTable
Dim vRowCount As Long
Dim graphSizer As Range
Dim theChart As ChartObject
Dim charObj As ChartObject
Set vPiv = ws.PivotTables("IdleSummary")
vRowCount = ws.Range(vPiv.TableRange2.Address).Rows.Count + 3
Set graphSizer = ws.Range("D3:J" & vRowCount)
Set theChart = ws.ChartObjects(1)
With theChart.Chart.Parent
.Left = graphSizer.Left
.Top = graphSizer.Top
.Width = graphSizer.Width
.Height = graphSizer.Height
End With
End Sub
这假设你只有一个图表,否则你可以用图表名称替换索引(1),例如("图1和#34;)。如果您有兴趣阅读有关活动的信息,可以在此处找到介绍:http://www.cpearson.com/excel/Events.aspx