如何在VBA中命名多层字段数据透视表

时间:2015-07-14 18:56:58

标签: excel excel-vba vba

我有以下代码,根据在K2中输入的内容,它会基于此过滤我的数据透视表。我一直收到一条错误,其中一行显示(Set Field = pt.PivotFields),该行调用该字段的名称。我想要影响的字段位于字段名称Locations / sub field loc name中。当我记录自己更改它时,代码调用以下字段:

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
  "[Locations].[Loc Name].[Location Name]").VisibleItemsList = Array( _
  "[Locations].[Loc Name].[Location Name].&[CENTRAL MISSISSIPPI MED CTR  (CMS-1)]")

'ActiveSheet.PivotTables("PivotTable1").PivotFields( _
  "[Locations].[Loc Name].[Location Acronym]").VisibleItemsList = Array("")
'ActiveSheet.PivotTables("PivotTable1").PivotFields( _
  "[Locations].[Loc Name].[Location Number]").VisibleItemsList = Array("")

关于我在单元格K2调用到枢轴字段中相应位置的方式的任何帮助都会很棒。

守则:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Intersect(Target, Range("K2:K3")) Is Nothing Then Exit Sub

Dim pt As PivotTable
Dim Field As PivotField
Dim NewCat As String

  Set pt = Worksheets("Fact Trans").PivotTables("PivotTable1")
  Set Field = pt.PivotFields("[Locations.Loc Name.Location Name]").VisibleItemsList
  NewCat = Worksheets("Fact Trans").Range("K2").Value

  With pt
    Field.ClearAllFilters
    Field.CurrentPage = NewCat
    pt.RefreshTable
  End With

End Sub

1 个答案:

答案 0 :(得分:0)

您正在尝试将String数组分配给PivotField,但这不会起作用。这是将VisibleItemsList添加到PivotFields调用结尾的结果。

<强>解决方案

  • 如果你真的只想要PivotField,请摆脱VisibleItemsList
  • 如果您真正想要的是该列表,则需要Dim Field as Variant以便它可以运行。这会打破下游代码,所以我怀疑这是你的目标。

我怀疑你想要的是前者:

Set Field = pt.PivotFields("[Locations].[Loc Name].[Location Name]")

您可以查看MS support for VisibleItemsList,如果这是您真正想要使用的属性。您的宏可能包含在代码中,因为您当时正在更改手动过滤器(这是该属性控制的)。