每当在Excel中激活工作表时,我都会尝试将过滤器添加到数据透视表中的列。
到目前为止,我有以下内容:
Dim pvt As PivotTable
Dim pvtField As PivotField
Set pvt = ActiveSheet.PivotTables("MyPivotTable")
Set pvtField = pvt.PivotFields("MyPivotColumnTopField")
'First refresh the table
pvt.RefreshTable
'Clear Out Any Previous Filtering
pvtField.ClearAllFilters
'Add the less than filter
pvtField.PivotFilters.Add xlValueIsLessThan, Value1:="1000"
但是我在尝试添加过滤器的行上遇到Invalid Procedure call or argument
错误。
我也试过了:
pvtField.PivotFilters.Add(xlValueIsLessThan, Value1:="1000")
但是语法错误。
我正在查看https://msdn.microsoft.com/en-us/vba/excel-vba/articles/pivotfilters-add-method-excel的文档,但无法弄明白。
答案 0 :(得分:0)
您正在使用.Add,但您应该根据该链接使用.Add2。
pf.PivotFilters.Add2 Type:=xlCaptionIsLessThan, Value1:=1000
(我注意到链接顶部有正确的语法,但底部的语法不正确。)
通常,解决这种语法问题的最简单方法是启动宏录制器,手动执行操作,然后检查代码。在这种情况下,这是有问题的。例如,如果我从右下方显示的数据透视表开始:
...然后在设置标签过滤器之前清除所有过滤器:
...然后我得到了我想要的确切结果:
...我得到以下代码:
Sub Macro6()
ActiveSheet.PivotTables("PivotTable1").PivotFields("Test").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Test").PivotFilters.Add2 _
Type:=xlCaptionIsLessThan, Value1:="11"
End Sub
但奇怪的是,当我运行该代码时,我得到了这个:
尽管宏录制器将字符串中的11代码吐出代码,即" 11",但不想要输入字符串。为什么宏观记录器会告诉你,否则我无法理解。
答案 1 :(得分:0)
根据@ jeffreyweir的答案(我为我做了一个基于字符串的过滤器),这是一个使用.Add2
同时使用基于字符串的过滤器和数值过滤器的工作示例。
这是我在每个按钮后面的代码:
Sub Button1_Click()
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Numbers")
pf.ClearAllFilters
pf.PivotFilters.Add2 Type:=xlCaptionIsLessThan, Value1:="11"
End Sub
Sub Button2_Click()
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Numbers")
pf.ClearAllFilters
pf.PivotFilters.Add2 Type:=xlCaptionIsLessThan, Value1:=11
End Sub
Sub Button3_Click()
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Numbers")
pf.ClearAllFilters
End Sub
请注意:
Button1
是Show < "11"
按钮,用于执行基于字符串的过滤器Button2
是执行数字过滤器的Show < 11
按钮Button3
是删除过滤器的Show All
按钮当我点击Show < "11"
按钮(即Button1)时,我得到以下结果:
当我点击Show < 11
按钮(即Button2)时,我得到以下(所需)结果: