在Excel中自动过滤数据透视表

时间:2012-12-16 15:37:42

标签: excel vba

我正在为下午的学校活动建立一个数据库。我正在尝试通过控制数据透视表的表单创建搜索选项,用户可以在其中过滤类类型和/或年龄组和/或学年。

我在VBA中编写了这段代码并且它无法正常工作。当我试图编写一个代码只过滤上面的一个(如类类型)时,它工作,但当我将它扩展为3个过滤器选项时,它无法正常工作。如果在其中一个选项中未插入任何值,则会失败。

search_class.Hide
ActiveSheet.PivotTables("PivotSearchClass").PivotFields("class type").ClearAllFilters

If IsNull(Range("type_search").Value) Then
    ActiveSheet.PivotTables("PivotSearchClass").PivotFields("class type").CurrentPage = "(All)"
Else: ActiveSheet.PivotTables("PivotSearchClass").PivotFields("class type").CurrentPage = Range("type_search").Value
End If

type_box = "pick a class type"

ActiveSheet.PivotTables("PivotSearchClass").PivotFields("group age").ClearAllFilters

If IsNull(Range("target_search").Value) Then
    ActiveSheet.PivotTables("PivotSearchClass").PivotFields("group age").CurrentPage = "(All)"
Else: ActiveSheet.PivotTables("PivotSearchClass").PivotFields("group age").CurrentPage = Range("target_search").Value
End If

target_box = "pick a group age"

ActiveSheet.PivotTables("PivotSearchClass").PivotFields("school year").ClearAllFilters

If IsNull(Range("year_search").Value) Then
    ActiveSheet.PivotTables("PivotSearchClass").PivotFields("school year").CurrentPage = "(All)"
Else:
ActiveSheet.PivotTables("PivotSearchClass").PivotFields("school year").CurrentPage = Range("year_search").Value
End If

year_search_box = "pick a school year"   

ActiveSheet.PivotTables("PivotSearchClass").PivotCache.Refresh  

有谁知道问题是什么以及如何解决?

2 个答案:

答案 0 :(得分:1)

我认为如果将测试更改为:

,它将起作用
If IsEmpty(Range("type_search").Value)

If Range("type_search").Value = ""

IsNull用于测试变量变量是否包含空值,对于空白或填充单元格,该值不会为真。

答案 1 :(得分:0)

我在这台计算机上没有Excel,而数据透视表是我的弱点,但我会尽力帮助你,因为你似乎独自一人。首先确保你的脚本确实运行了if语句的“True”情况,然后我将编辑CurrentPage的值以查看你的问题是否存在(即,将“(all)”值更改为其他值)。错误在哪里,错误描述是什么?