我需要帮助来过滤具有日期范围的枢纽项目。这些项目的日期为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
答案 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
答案 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
此解决方案非常适合数据透视表的应用。我本身并没有解决问题,但是我得到了我所需要的。
感谢那些花时间阅读这篇文章并尝试提供帮助的人。
祝你有美好的一天!