关于excel:尝试使用VBA根据单元格D2和E2中的年份和期间值过滤我的数据透视表

Trying to use VBA to filter my Pivot Table based on Year and Period values in cells D2 and E2

我正在尝试使用 VBA 过滤我的数据透视表,因此它将分别根据单元格 D2 和 E2 中的期间和年份进行过滤。我有下面的代码,它按年份过滤,并且在列中没有会计期间的情况下工作,但是当我将会计期间放在列中时,它会在 Field.ClearAllFiltersField.CurrentPage = Year 行进行调试。有人可以帮我解决这个问题吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Worksheets("CY PT").Range("E2")) Is Nothing Then Exit Sub

Dim PT As PivotTable
Dim Field As PivotField
Dim Year As String

Set PT = Worksheets("CY PT").PivotTables("CY PT")
Set Field = PT.PivotFields("Fiscal Year")
Year = Worksheets("CY PT").Range("E2").Value

With PT
Field.ClearAllFilters
Field.CurrentPage = Year
PT.RefreshTable
End With

End Sub


.CurrentPage 方法仅适用于 PageFields。听起来您正在尝试过滤 RowFields。所以你的选择是:

  • 将您的字段更改为 PageFields;或者
  • 使用切片机;或者
  • 使用 PageField 过滤器下拉伪装作为数据验证
    下拉列表(就像我在
    http://dailydoseofexcel.com/archives/2014/08/16/sync-pivots-from-dropdown/
    );或者
  • 遍历每个字段的 PivotItems 集合,并设置
    .Visible 状态除所选项目外的所有项目为 FALSE。

如果您选择最后一个选项,您需要注意这可能需要一段时间。请参阅我在基于变量范围过滤数据透视表中发布的代码,以了解如何有效地执行此操作。还请阅读我在 http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/ 上的帖子。