VBA在数据透视表过滤器中选择指定的日期范围

时间:2017-05-22 13:47:41

标签: vba

我正在尝试使用vba自动选择数据透视表的报表过滤器部分中的日期。这个想法是用户在运行宏之前输入开始和结束日期。代码将首先清除所有过滤器,然后选择在指定日期之间出现的所有日期。我有下面的代码,只要有指定日期的数据存在,但没有数据时会抛出错误。 任何有关解决错误的帮助都将受到高度赞赏。

代码:

Sub PivotFilter()
Dim pvtF As PivotField
Dim pvtI As PivotItem
Dim StartDate As Date
Dim EndDate As Date

Sheets("Report").Activate
StartDate = Cells(2, 3)
EndDate = Cells(4, 3)

Worksheets("Pivots").PivotTables("PivotTable2").PivotFields("Date Received").ClearAllFilters
Set pvtF = Worksheets("Pivots").PivotTables("PivotTable2").PivotFields("Date Received")

For Each pvtI In pvtF.PivotItems
     If DateValue(pvtI.Name) >= StartDate And DateValue(pvtI.Name) <= EndDate Then
         pvtI.Visible = True
     Else
         pvtI.Visible = False
     End If
Next pvtI

End Sub

1 个答案:

答案 0 :(得分:0)

信不信由你真的&#39;正确&#39;行为。

表示,数据透视表不能将所有可见设置为false的项目设置为false。

您可以使用.VisibleItems.Count属性检查数据透视字段的可见项目数。

作为一点点kludge,您可以在表格中创建一个明显无效的日期,例如&#34; 2099年12月31日&#34;并使用上面的属性,因此它是您的数据透视表中显示的最后一个属性,而不会产生错误。使用该条目并将代码中的pvtI.Visible = False更改为:

If pvtF.VisibleItems.Count <> 1 Then pvtI.Visible = False

至少你会在显示明显不在范围内的日期时摆脱错误。