【发布时间】:2016-12-09 15:49:52
【问题描述】:
我是 VBA 的新手(这是第 2 天!)。我正在尝试设置数据透视表过滤器以匹配组合框用户选择。我找到了一些代码,可以在选择单元格时将过滤器设置为单元格的内容,并且我通过将其放在按钮的子项中对其进行了修改,以便在单击按钮之前不会激活代码。
Sub Generate_Report()
'PLAN - Changes Plan filter value for PivotTable to value in Plan combo box, which is
'linked to cell D9
'Set the Variables to be used
Dim pt As PivotTable
Dim PlanFilter As PivotField
Dim NewPlan As String
Set pt = Worksheets("Pivot Table").PivotTables("PivotTable_Parameters")
Set PlanFilter = pt.PivotFields("Plan")
NewPlan = Worksheets("Report Options").Range("D9").Value
'Update and refresh the PIVOT table
With pt
PlanFilter.ClearAllFilters
pt.PivotFields("Plan").CurrentPage = NewPlan
pt.RefreshTable
End With
End Sub
(我希望我能找到获取代码的页面 - 感谢在线 VBA 社区帮助我入门!)
我已更改原始代码中的一些变量名称以更好地匹配上下文。 PlanFilter 以前称为Field。 .CurrentPage 行之前读取:Field.CurrentPage=NewCat
.CurrentPage 行有问题。在我更改变量名之前它工作得很好,但是一旦我这样做了,我得到了一个“应用程序定义或对象定义”的错误。我将字段引用更改为您在此处看到的较长引用,并且它最初有效,然后没有。
Getting "Unable to set CurrentPage property of PivotField class" error 解决了使用相同代码的类似问题,但我无法在此处发表评论。我尝试了 Scott 建议的更改:
With PlanFilter
.ClearAllFilters
.CurrentPage = NewPlan
End With
...但我仍然收到错误消息。
有什么想法吗?
谢谢!
凯特
【问题讨论】:
-
With pt pt.PivotFields是多余的。在您已经使用With pt语句设置它之后,我不会使用pt。 -
谢谢你,萨尔瓦多。你能告诉我我会用什么代码替换它吗?我对此非常非常陌生。另外,感谢您的编辑!您是如何按照您的方式更改文本中的字段位的?
-
如果您在代码语句前后添加一个`字符,它会将它们更改为“sn-ps”,而不仅仅是单词。
-
我将添加我建议的更改作为答案。我不希望它解决您最初的问题,但它至少会为您的编码易读性增加价值。
-
@KateGrafel 您从 Scott Holtzman 那里获取的代码是有效的,这取决于您的
PivotTable的结构。您可以编辑您的帖子并添加数据透视表的屏幕截图吗?