2

我已经阅读了一段时间,并达到了询问 SO 点。我在 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)而不是新模块中,如果我实际输入代码然后按回车键,我可以让它运行。现在我想知道是否有办法让它做到这一点,而无需手动输入值并按回车键。我只想能够使用我的下拉菜单来选择一个新名称,并且当 c3 中的值由于下拉选择器而更改时更新数据透视表。

一如既往地谢谢你。

4

1 回答 1

3

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

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

If it's based on a form, but code in the on_change event of the form control.

于 2012-04-26T19:58:45.053 回答