excel - 有没有办法取消选中数据透视表中除特定项目之外的其他项目?

标签 excel vba pivot-table

我是 VBA 的新手,我在一些关于如何取消选中或取消选择数据透视表中除特定项目之外的所有项目的代码方面遇到了一些问题。

我正在创建一个按钮来自动过滤仅在 1 月(“20190131”)或 2 月(“20190228”)等显示数据的数据。

我仍然没有 10 月(“20191031”)、11 月和 12 月的数据,这会导致错误“无法设置 PivotItem 的 Visible 属性”,因为这些日期仍然没有现有数据。我只想检查一个项目,其余的不检查。

我尝试手动将 Pivot Items 的可见性设置为 false,excel 需要很长时间才能取消选中它们,并且我不希望我的项目是静态的。而且,如果数据仍然不存在,例如我使用的数据只是从 2019 年 1 月到 2019 年 9 月。

   Sub Procdate_January()

  Procdate_January Macro
  ' Macro for changing the PROCDATE of Pivot Tables in Worksheet 
  "Worksheet1" to "20190131".

Sheets("Worksheet1").Select
ActiveSheet.PivotTables("PivotTable1").PivotFields("PROCDATE"). _

    CurrentPage = "(All)"

With ActiveSheet.PivotTables("PivotTable1").PivotFields("PROCDATE")
    .PivotItems("20190131").Visible = True

    .PivotItems("20190228").Visible = False

    .PivotItems("20190331").Visible = False

    .PivotItems("20190430").Visible = False

    .PivotItems("20190531").Visible = False

    .PivotItems("20190630").Visible = False

    .PivotItems("20190731").Visible = False

    .PivotItems("20190831").Visible = False

    .PivotItems("20190930").Visible = False

    .PivotItems("20191031").Visible = False

    .PivotItems("20191130").Visible = False

    .PivotItems("20191231").Visible = False

    ActiveSheet.PivotTables("PivotTable2").PivotFields("XDPI_PROCDATE"). _
    CurrentPage = "(All)"
    End With
End Sub

我希望输出将是数据透视表中唯一可见的过滤器将是“20190131”。但它得到一个错误,其他 20190930、20191031、20191130、20191231 找不到。

最佳答案

如果只有一项可供选择,则 不要一个一个地设置每个项目,甚至循环设置。只需清除过滤器并将值设置为相关值。

看到这个

手动方式

enter image description here

通过 VBA 代码

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim PivName As String
    Dim PivField As String
    Dim PivValue As String

    '~~> Change as applicable
    Set ws = Sheet1

    PivName = "PivotTable1"
    PivField = "Year"    '~~> PROCDATE in your case?
    PivValue = 2019      '~~> 20190131 in your case?

    With ws.PivotTables(PivName).PivotFields(PivField)
        .ClearAllFilters
        .PivotFilters.Add2 Type:=xlCaptionEquals, Value1:=PivValue
    End With
End Sub

Is there anyway I can put the "PROCDATE" in the "Filter" section in the PivotTable instead of "Rows"?



录制宏时。你会得到这样的东西
ActiveSheet.PivotTables("PivotTable1").PivotFields("Year").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Year").CurrentPage = "2014"

所以只需将上面的代码更改为
With ws.PivotTables(PivName).PivotFields(PivField)
    .ClearAllFilters
    .CurrentPage = PivValue
End With

关于excel - 有没有办法取消选中数据透视表中除特定项目之外的其他项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815285/

相关文章:

MySQL 仅返回指定组中的用户

arrays - 在 VBA 中重新调光数组

c# - WPF 应用程序将数据表写入 Excel 的更有效方法?

excel - 由另一列随机选择一个列子集中的值

excel - VBA - 将 "=>"作为字符串写入单元格

VBA 用换行符替换字符串

excel - 查找特定文本、选择并突出显示

excel - 当数据透视表的选择更改时如何自动运行宏

mysql - 另一个数据透视表查询

VBA 群发邮件问题