更改数据透视图的高度以匹配数据透视表的高度

时间:2015-09-08 22:57:44

标签: excel vba excel-vba pivot-table

我与PivotCharts合作很多,但VBA体验绝对没有。我有excel模板上传到数据库,然后可以作为报告下载与该数据库中的数据。我在一张纸上有一个pivotTable / PivotChart组合。有时表有5行数据,有时有1200行数据,具体取决于数据库,时间帧等。

我想做的是,图表占用的行数与表格+ 3的高度相同,并且始终显示在D3:J3中的宽度和起始位置。这使数据与图表保持一致。

我找到了类似的?从去年开始:Resize pivot chart when selecting different less/more values

它没有给我任何结果(或者我做错了什么)。

相关信息:表格/图表在Sheet4(“摘要”)上,在数据透视表选项下,它被称为“IdleSummary”。

感谢您提供任何帮助,谢谢!

1 个答案:

答案 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