0

我正在努力Pivotchart使用 VBA 格式化 & 将数据添加到图表中。我已经设置了代码来创建工作正常的数据透视图,我可以手动格式化和添加数据,但是每当我尝试模仿宏记录器或我在网上阅读的任何内容时,它似乎都无法说明“应用程序定义或对象定义错误。

我试图将代码更改objChartActiveChart尝试模仿我在使用宏记录器时所做的事情,但这仍然失败。在我最初的尝试失败后,我尝试了录音机。

我也没有ChartTitle.Add工作,所以我可以修改可见的标题(目前没有任何东西显示为标题)。

ActionTracker.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    Actions, Version:=6).CreatePivotTable _
    TableDestination:=CtyDrng, TableName:="Country Overview", _
    DefaultVersion:=6


        Dim pt As PivotTable
        Dim PtRange As Range
        Dim ChrtRange As Range
        Dim objChart As Chart
        Dim chtSeries As SeriesCollection

Set pt = CountryDash.PivotTables("Country Overview")

Set PtRange = pt.TableRange1

With PtRange
    Set ChrtRange = .Offset(, 1).Resize(1, .Columns.Count - 1)
    Set ChrtRange = Union(ChrtRange, .Offset(.Rows.Count - 1, 1).Resize(1, .Columns.Count - 1))
End With

Set objChart = CountryDash.Shapes.AddChart.Chart

With objChart
    .SetSourceData ChrtRange
    .ChartType = xlBarStacked100
    .ShowAllFieldButtons = True
'        .ChartTitle.Add
    '.ChartTitle.Select
'        .ChartTitle.Text = "Country Overview"
End With
    With objChart.PivotLayout.PivotTable.PivotFields("Country")
    .Orientation = xlRowField
    .Position = 1
End With
With objChart.PivotLayout.PivotTable.PivotFields("Region")
    .Orientation = xlRowField
    .Position = 2
End With
With objChart.PivotLayout.PivotTable.PivotFields("Overdue")
    .Orientation = xlRowField
    .Position = 3
End With
   objChart.PivotLayout.PivotTable.AddDataField objChart.PivotLayout. _
    PivotTable.PivotFields("Overdue"), "Overdue", xlCount

我希望代码按国家和地区创建一个透视图,显示具有 3 个不同类别“已实施”、“进行中”和“逾期”的逾期行动。

4

1 回答 1

0

如果这不完全适合,请原谅,但我没有尝试使用adddatafield,我认为这会导致问题,因为您要添加到图表,而不是数据透视缓存。

您可以通过与数据透视缓存中已经可用的数据透视字段关联(由标头调用)来避免这种情况:

With pivotsheet.PivotTables("CHART_NAME")
    'Insert Row Fields
    With .PivotFields("Country")
        .Orientation = xlRowField
    End With
    'Insert Data Field
    With .PivotFields("Overdue")
        .Orientation = xlDataField
        .Function = xlCount
        .NumberFormat = "#,##0"
        .Name = "Number Overdue"
    End With
End With

为了向数据透视表添加名称,请考虑您是如何生成的……不要只是附加事物,当它们发生时采取行动:

'Define Pivot Cache
lrs = source.Cells(source.Rows.Count, 1).End(xlUp).Row
Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="SOURCE_SHEET!A1:B" & lrsource)
'Insert Blank Pivot Table
Set pt = pc.CreatePivotTable(TableDestination:=pivotsheet.Cells(1, 1), TableName:="CHART_NAME")

添加数据透视表后,开始添加页面字段、列字段、行和数据字段。

于 2019-08-13T15:02:00.853 回答