首页 > 解决方案 > VBA - VBA 非常新 努力根据包含时间和日期的单元格过滤数据透视表 .pivotitems

问题描述

我对 VBA 很陌生并且碰壁了。我正在尝试自动使用 15 个数据透视表(本例中只有一个测试)当我手动执行此操作时,我在数据透视搜索框中输入“mm/yyyy”并从给定月份返回项目。(如屏幕截图所示)

如果我专注于字母列或数字列,则以下代码会正确过滤,但如果我尝试专注于案例创建时间/格式化日期,我会得到“无法获取 pivotfield 类的 pivotitem 属性”

我认为这是因为日期和时间结合在一起,或者因为数据不是“干净的”。

欢迎您提供任何非常基本的指示。

谢谢

代码:

Sub DateFilterPivotWithSlicer()

Dim p_i As PivotItem

ActiveSheet.PivotTables("PivotTable2").ClearAllFilters

ActiveSheet.PivotTables("PivotTable2").PivotFields ("FormattedDate")

    With ActiveSheet.PivotTables("PivotTable2").PivotFields("FormattedDate")
        .PivotItems("24/08/2018").Visible = True
        For Each p_i In .PivotItems
            ' If loop here will cycle through all items in the pivot table and then pass to next
            If p_i.Name <> "24/08/2018" Then
            p_i.Visible = False

            End If
        Next
    End With


End Sub

我正在使用的测试数据: 我正在使用的测试数据

标签: excelvba

解决方案


尝试

Sub DateFilterPivotWithSlicer()

Dim p_i As PivotItem
Dim pv As PivotTable
Dim Ws As Worksheet
Dim sFind As String, s As String
Dim d As Long

Set Ws = ActiveSheet

Set pv = Ws.PivotTables("PivotTable2")
'Set pv = Ws.PivotTables(1)
pv.ClearAllFilters

    With pv.PivotFields("FormattedDate")
        sFind = "08/2018"
        sFind = Replace(sFind, "/", "-")

        For Each p_i In .PivotItems
            s = p_i.Name
                d = DateValue(p_i.Name)
                s = Format(d, "mm/yyyy") 's result 08-2018
            ' If loop here will cycle through all items in the pivot table and then pass to next
            If s = sFind Then
                p_i.Visible = True
            Else
                p_i.Visible = False
            End If
        Next
    End With
End Sub

推荐阅读