我目前有一个数据透视表,可以从SharePoint网站获取数据。使用此数据透视表我想使用Button将Filter设置为某个日期范围。我使用此网站获取过滤器以将过滤器值更改为特定日期,代码如下:
Sheets("Sheet2").Select
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = Date
这很适合将过滤器重置为当前日期,但我似乎找不到任何方法可以将过滤器设置为过去5天,10天或15天的所有日期,或者甚至将过滤器设置为当月的所有日期。
非常感谢任何协助。
答案 0 :(得分:0)
鉴于您尝试将日期范围应用于Source
(如ReportFilter
所示,您需要循环查看日期.CurrentPage = Date
中的所有PivotItems
并测试你的日期范围。
下面的内容(未经测试):
PivotFields
答案 1 :(得分:0)
首先,如果您的日期字段恰好位于“行”或“列”区域(但不是特定情况下的“过滤器/页面”区域),则“过滤器”下拉列表中提供了“日期过滤器”选项:
其次,在Excel 2013或更高版本中有时间表:
正如Scott在上面的评论中正确地说的那样,如果要过滤的PivotField不是PageField,那么第一个选项只能直接 ,即它不在数据透视表字段列表的“过滤器”窗格中。因为如果它位于“过滤器”窗格中,则您不会获得上面显示的任何过滤器选项,如以下屏幕截图所示:
但是有一个简单的解决方法:只需将其完全拖出数据透视表,因为您实际上仍然可以过滤不在数据透视表中的字段:
当我设置'Between'过滤器时,启动宏录制器会产生以下代码:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add2 _
Type:=xlDateBetween, Value1:="23/12/2015", Value2:="31/12/2015"
这是一个广义版本,它会将任何日期枢轴场过滤到你想要的最后X个:
Sub LastXDays(lDays As Long, Optional pf As PivotField)
Dim StartDate As Date
Dim EndDate As Date
EndDate = Date
StartDate = EndDate - lDays + 1
If pf Is Nothing Then
On Error Resume Next
Set pf = ActiveCell.PivotField
If Err.Number <> 0 Then GoTo errhandler
On Error GoTo errhandler
End If
If Not IsDate(pf.PivotItems(1)) Then GoTo errhandler
pf.ClearAllFilters
pf.PivotFilters.Add2 _
Type:=xlDateBetween, _
Value1:=CStr(StartDate), _
Value2:=CStr(EndDate)
errhandler:
End Sub
您可以使用以下内容调用该例程:
Sub Last5Days()
LastXDays 5, ActiveSheet.PivotTables("PivotTable1").PivotFields("Date")
End Sub
如果您不清楚是否需要更多帮助来实现此目的,请回复。