【发布时间】:2019-09-13 09:05:28
【问题描述】:
我从 Internet 检索到一个有用的 VBA 命令,它允许我更改 Excel 中的任意单元格,该单元格充当我的数据透视表的过滤器。当我尝试在同一张工作表上重复使用相同的命令但使用不同的过滤器时,我收到“编译错误:检测到不明确的名称:Worksheet_Change”通知并且代码停止工作......我试图将“End Sub”更改为“ Exit Sub" 不起作用,我希望有人能在这里指出正确的方向。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = Range("D2").Address Then Exit Sub
Dim PT As PivotTable
Dim ptItem As PivotItem
On Error Resume Next
For Each PT In Worksheets("Tier Comps").PivotTables
With PT.PivotFields("Product")
If .EnableMultiplePageItems = True Then
.ClearAllFilters
End If
Set ptItem = .PivotItems(Target.Value)
If Not ptItem Is Nothing Then
.CurrentPage = Target.Value
End If
End With
Next
Exit Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = Range("D3").Address Then Exit Sub
Dim PT As PivotTable
Dim ptItem As PivotItem
On Error Resume Next
For Each PT In Worksheets("Tier Comps").PivotTables
With PT.PivotFields("Country Tier")
If .EnableMultiplePageItems = True Then
.ClearAllFilters
End If
Set ptItem = .PivotItems(Target.Value)
If Not ptItem Is Nothing Then
.CurrentPage = Target.Value
End If
End With
Next
End Sub
希望有两个单独的单元格为同一张表上的一个数据透视表修改两个单独的过滤器。
【问题讨论】:
-
你有两个同名的潜艇
Private Sub Worksheet_Change(ByVal Target As Range)你不能有那个 -
我之前遇到过类似的问题,奇怪的是有一个非常简单的解决方案 - 在 VBA 中,您只需指定具有数据透视表过滤器的单元格是您想要的值,它会自动更新桌子;即从字面上命名范围并说出什么值。
-
克里斯,如果您想同时处理两个单元格,即 D2 和 D3,那么您可以在一个
Worksheet_Change事件中完成。您不需要两个单独的潜艇,而且也不需要相同的名称:) -
@SiddharthRout,请问 - 我该怎么做?当我说菜鸟时,我的意思是我没有 VBA 知识......只需搜索谷歌
-
查看THIS 您可以使用
If Not Intersect(Target, Range("D2")) Is Nothing Then,如该链接所示,在ElseIf中对D3 执行相同操作:) 试一试。如果遇到困难,请回帖。