【问题标题】:How to name a multi layered field pivot table in VBA如何在 VBA 中命名多层字段数据透视表
【发布时间】:2019-03-13 07:34:40
【问题描述】:

我有下面的代码,它根据 K2 中输入的内容过滤我的数据透视表。我不断收到一条错误消息,上面写着 (Set Field = pt.PivotFields),它调用了字段的名称。我试图影响的字段位于字段名称位置/子字段位置名称中。当我记录自己更改它时,代码调用以下字段:

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

【问题讨论】:

  • 那行不应该是Set Field = pt.PivotFields("[Locations].[Loc Name].[Location Name]").VisibleItemsList吗?看起来您删除了字段名称周围的括号。
  • 可能是一个错字,但没关系仍然得到错误 '424' Object required

标签: excel vba


【解决方案1】:

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

解决方案

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

我怀疑你想要的是前者:

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

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

【讨论】:

  • 拜伦感谢您的回复,现在我收到运行时错误“1004”:无法设置 PivotField 类的 CurrentPage 属性,为什么?
  • CurrentPage 要求 Field 是报表过滤器(不是行或列字段),并且新值实际上在可能的选择列表中。我会验证这两个。后者可能更有可能,因为您使用来自 Worksheet 的输入作为过滤器。如果这不能解决问题,请使用更新的代码和所涉及的一些数据的示例提出一个新问题。
猜你喜欢
  • 2021-12-06
  • 2011-09-07
  • 2019-02-24
  • 2016-11-09
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多