在Excel VBA中为数据透视表添加Less Than过滤器

时间:2018-04-11 16:54:30

标签: excel excel-vba pivot-table vba

每当在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的文档,但无法弄明白。

2 个答案:

答案 0 :(得分:0)

您正在使用.Add,但您应该根据该链接使用.Add2。

pf.PivotFilters.Add2 Type:=xlCaptionIsLessThan, Value1:=1000

(我注意到链接顶部有正确的语法,但底部的语法不正确。)

通常,解决这种语法问题的最简单方法是启动宏录制器,手动执行操作,然后检查代码。在这种情况下,这是有问题的。例如,如果我从右下方显示的数据透视表开始:

enter image description here

...然后在设置标签过滤器之前清除所有过滤器:

enter image description here enter image description here

...然后我得到了我想要的确切结果:

enter image description here

...我得到以下代码:

Sub Macro6()

    ActiveSheet.PivotTables("PivotTable1").PivotFields("Test").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Test").PivotFilters.Add2 _
        Type:=xlCaptionIsLessThan, Value1:="11"
End Sub

但奇怪的是,当我运行该代码时,我得到了这个:

enter image description here

尽管宏录制器将字符串中的11代码吐出代码,即" 11",但想要输入字符串。为什么宏观记录器会告诉你,否则我无法理解。

答案 1 :(得分:0)

根据@ jeffreyweir的答案(我为我做了一个基于字符串的过滤器),这是一个使用.Add2同时使用基于字符串的过滤器和数值过滤器的工作示例。

这是我的示例表和数据透视表: Example Excel Table

这是我在每个按钮后面的代码:

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

请注意:

  • Button1Show < "11"按钮,用于执行基于字符串的过滤器
  • Button2是执行数字过滤器的Show < 11按钮
  • Button3是删除过滤器的Show All按钮

当我点击Show < "11"按钮(即Button1)时,我得到以下结果:

After clicking Button1

当我点击Show < 11按钮(即Button2)时,我得到以下(所需)结果:

After clicking Button3