当单元格中的值更改时,会更改数据透视表上的筛选器

时间:2012-04-26 19:51:20

标签: excel vba excel-vba excel-2007

我一直在读书,并达到了提问点。我在excel中有一个下拉选择器,允许我更改名称,当名称更改时,“C3”中的值被更改(c3引用另一个工作表上的另一个单元格,如果这很重要),当“C3”中的值更改时想在另一张工作表上使用数据透视表(目前为工作表6)更新其在地区ID上的过滤器,以反映新值“C3”。

这对我来说听起来像是一件大事,所以我四处寻找并发现VBA有事件(耶!),但我无法让我的活动真正做任何事情。当我将它作为一个宏运行时,我在那里的代码工作,但我真的希望它在每次单元格“C3”中的值发生变化时自动运行。

这是我到目前为止所尝试的内容:

 Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Sheets("Current Status").Range("C3")) Is Nothing Then
Sheets("Sheet6").PivotTables("PivotTable5").PivotFields("territory_id"). _
    ClearAllFilters
Sheets("Sheet6").PivotTables("PivotTable5").PivotFields("territory_id").CurrentPage _
    = Sheets("Current Status").Range("C3").Value
 End If
 End Sub

更新:我发现如果我把上面的代码放在表单部分(表2)而不是新模块中,我可以让它运行,如果我实际输入代码然后按回车键。现在我想知道是否有办法让它做到这一点,我不必手动输入值并按Enter键。我只是希望能够使用我的下拉菜单选择一个新名称,并且当c3中的值因下拉选择器而更改时更新数据透视表。

一如既往地谢谢你。

1 个答案:

答案 0 :(得分:3)

问题是C3实际上并没有改变,因为它只是正在更新的公式引用。是表单上的“下拉选择器”还是基于数据验证和单元格?

如果它基于细胞,则将您的目标设置为目标细胞,而不是C3 - >因为C3只是一个 公式引用,您的下拉单元格实际上正在改变。

如果它基于表单,而是表单控件的on_change事件中的代码。