我正在尝试使用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
答案 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
至少你会在显示明显不在范围内的日期时摆脱错误。