如何使用Excel VBA筛选具有日期范围的数据透视项

时间:2018-09-20 18:31:06

标签: excel vba filter ms-office pivot-table

我需要帮助来过滤具有日期范围的枢纽项目。这些项目的日期为2014年至2018年之间,格式为YYYY-MM-DD。我希望过去12个月的项目在数据透视表中可见。

我首先想到的代码会检查数据透视表下拉列表中的所有项目。然后,应取消选中不在12个月范围内的所有项目。

问题:代码不过滤任何内容,因此所有项目仍然可见。

Dim pivot As PivotItem
Dim currentMonth As Integer
Dim currentYear As Integer
currentMonth = Month(Date)
currentYear = Year(Date)

ActiveSheet.PivotTables("OEMI").RefreshTable
ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").EnableMultiplePageItems = True

For Each pivot In ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").PivotItems
        If Not (Year(pivot) = currentYear And Month(pivot) <= currentMonth) Or _
                (Year(pivot) = currentYear - 1 And Month(pivot) > currentMonth) Then
                    pivot.Visible = False

                Else
                'Do nothing and stay visible in the drop-down list
                End If
    Next pivot

编辑***************** 我使用观察窗口在代码遍历For Each循环时查看变量的值和类型。看来我的pivot.visible = true / false方法存在类型不匹配的问题。任何想法可能是什么问题? Watch Window

Snippet of the data

2 个答案:

答案 0 :(得分:0)

DateFrom = DateAdd("yyyy", -1, Date)
DateTo = Date

ActiveSheet.PivotTables("OEMI").PivotCache.Refresh
ActiveSheet.PivotTables("OEMI").PivotFields("Date Sent to Coordinator").ClearAllFilters
ActiveSheet.PivotTables("OEMI").PivotFields("Date Sent to Coordinator").PivotFilters.Add Type:=xlDateBetween, Value1:=DateFrom, Value2:=DateTo

enter image description here

答案 1 :(得分:0)

我找到了一种解决方案,可以显示过去12个月的所有项目。我使用了日期的Excel数值,并用它来过滤数据透视表项。

'Define the pivot items
Dim pivot As PivotItem

'Refresh the pivot table
ActiveSheet.PivotTables("OEMI").RefreshTable 'VBA will now use the current pivot item rather than the previously cached _
                                              pivot items


'Add filters for "Date sent to Coordinator"
ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").EnableMultiplePageItems = True 'Select Multiple Items

'Define the date variables
Dim CurrentDate As Long 'Convert the current date to excel numerical date
Dim LastYear As Long
LastYear = CurrentDate - 365 'Numerical value of the date 12 months ago

For Each pivot In ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").PivotItems

    If CLng(pivot) >= LastYear Then
        pivot.Visible = True
    Else
        pivot.Visible = False
    End If

Next pivot

此解决方案非常适合数据透视表的应用。我本身并没有解决问题,但是我得到了我所需要的。

感谢那些花时间阅读这篇文章并尝试提供帮助的人。

祝你有美好的一天!