簡體   English   中英

將小於篩選器添加到Excel VBA中的數據透視表

[英]Adding a Less Than filter to a pivot table in Excel 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/zh-cn/vba/excel-vba/articles/pivotfilters-add-method-excel上查看文檔,但無法弄清楚。

您正在使用.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碼的事實,你希望在一個字符串飼料。 為何宏記錄器會告訴您其他原因,這超出了我的范圍。

基於@jeffreyweir的答案(為我做了一個基於字符串的過濾器),這是一個將.Add2與基於字符串的過濾器和數值過濾器結合使用的工作示例。

這是我的示例表和數據透視表: 示例Excel表

這是我在每個按鈕后面的代碼:

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"按鈕,它執行基於字符串的過濾器
  • Button2Show < 11按鈕,它執行數字過濾
  • Button3是“ Show All按鈕,可刪除過濾器

當我單擊Show < "11"按鈕(即Button1)時,得到以下結果:

單擊Button1之后

當我單擊Show < 11按鈕(即Button2)時,得到以下(期望的)結果:

單擊Button3之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM