VBA在透视表筛选器中选择指定的日期范围

VBA在透视表筛选器中选择指定的日期范围,vba,Vba,我正在尝试使用vba在透视表的“报告过滤器”部分中自动选择日期。其思想是用户在运行宏之前输入开始和结束日期。代码将首先清除所有过滤器,然后选择指定日期之间出现的所有日期。我有下面的代码,只要有指定日期的数据就可以正常工作,但没有数据时会抛出错误。 我们将非常感谢您对解决错误的任何帮助 代码: 信不信由你,这实际上是“正确的”行为。透视表不能将visible的所有项都设置为false,否则excel将抛出错误 可以使用.VisibleItems.Count属性检查透视字段中可见项的数量 有点麻烦的

我正在尝试使用vba在透视表的“报告过滤器”部分中自动选择日期。其思想是用户在运行宏之前输入开始和结束日期。代码将首先清除所有过滤器,然后选择指定日期之间出现的所有日期。我有下面的代码,只要有指定日期的数据就可以正常工作,但没有数据时会抛出错误。 我们将非常感谢您对解决错误的任何帮助

代码:


信不信由你,这实际上是“正确的”行为。透视表不能将visible的所有项都设置为false,否则excel将抛出错误

可以使用.VisibleItems.Count属性检查透视字段中可见项的数量

有点麻烦的是,您可以在表中创建一个日期明显无效的最后一个条目,如2099年12月31日,并使用上述属性,使其成为透视表中显示的最后一个条目,而不会产生错误。使用该条目并将代码中的pvtI.Visible=False更改为:

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

至少您可以在显示明显不在范围内的日期时消除错误。

感谢您的回复。我不确定我的其余评论在哪里消失了lol。我无法创建其他条目,因为数据基于外部连接,并且每次运行报告时都会刷新。我无法将日期字段从数据透视报告筛选器移动到行或列,因为我正在使用“getpivotdata”公式从数据透视提取数字。这基本上是一个棘手的情况…是的,不知道你的选择是什么。我希望其他人也能发帖子,这样至少我能看到其他人是如何处理这件事的。
If pvtF.VisibleItems.Count <> 1 Then pvtI.Visible = False