0

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

我在 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  

有谁知道问题出在哪里以及如何解决?

4

2 回答 2

1

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

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

或者

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

IsNull用于测试变量变量是否包含空值,无论是空白单元格还是填充单元格都不会为真。

于 2012-12-17T02:35:09.317 回答
0

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

于 2012-12-16T19:37:35.107 回答