VBA宏来更改数据透视表中的过滤器

时间:2017-03-13 10:51:37

标签: excel vba excel-vba pivot-table

我正在尝试自动执行每日报告,因此我想创建两个按钮来更改三个数据透视表的过滤器。详细信息按钮应更改显示的日期。昨天的第一个过滤器第二个是重置按钮确实清除所有过滤器并显示所有日期。 “Resest”-Button正在运作,但“昨天” - 但不是。

目前宏看起来像这样:

Private Sub CommandButton2_Click()
    MsgBox ActiveSheet.Range("B1")
    With ActiveSheet.PivotTables("Detail_Digital").PivotFields("Tag").CurrentPage = _
    ACtiveSheet.Range("B1").Value
    End With
End Sub

我也尝试了PivotFilters.Add _ , Type:=xlDateYesterday,但这也无效。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试以下代码,它应该有效,除非你的"日期"在数据透视表的数据源与Range("B1")之间的格式不同。

注意:尽量避免使用ActiveSheet,而是使用引用的对象。在下面的情况中,请将Worksheets("Sheet1")替换为您的工作表名称。

<强>代码

Option Explicit

Private Sub CommandButton2_Click()

Dim PvtTbl      As PivotTable
Dim PvtItm      As PivotItem

' set the Pivot Table
Set PvtTbl = Worksheets("Sheet1").PivotTables("Detail_Digital")

With PvtTbl
    .PivotFields("Tag").ClearAllFilters ' <-- clear all filters to "Tag"
    'Debug.Print Worksheets("Sheet1").Range("B1").Value
    For Each PvtItm In .PivotFields("Tag").PivotItems
        If PvtItm.Name = Worksheets("Sheet1").Range("B1").Value Then
            PvtItm.Visible = True
        Else
            PvtItm.Visible = False
        End If
    Next PvtItm
End With

End Sub