Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 透视表的VBA代码选择全部,然后取消选择0和空白_Excel_Vba_Excel 2010_Pivot Table - Fatal编程技术网

Excel 透视表的VBA代码选择全部,然后取消选择0和空白

Excel 透视表的VBA代码选择全部,然后取消选择0和空白,excel,vba,excel-2010,pivot-table,Excel,Vba,Excel 2010,Pivot Table,需要有关编写VBA代码以选择数据透视表中的所有数据透视表以及对同一工作表中的多个数据透视表取消选择0和空白的帮助。有时,某些透视表中的透视项可能不为空。我使用了录制功能,但是它似乎没有录制取消选择的0和空白 Sheets("DATApivot").Select ActiveSheet.PivotTables("PivotTable7").PivotFields("AmtIncurred").CurrentPage _ = "(All)" With ActiveSheet.PivotTab

需要有关编写VBA代码以选择数据透视表中的所有数据透视表以及对同一工作表中的多个数据透视表取消选择0和空白的帮助。有时,某些透视表中的透视项可能不为空。我使用了录制功能,但是它似乎没有录制取消选择的0和空白

Sheets("DATApivot").Select
ActiveSheet.PivotTables("PivotTable7").PivotFields("AmtIncurred").CurrentPage _
    = "(All)"
With ActiveSheet.PivotTables("PivotTable7").PivotFields("AmtIncurred")
    .PivotItems("0").Visible = True
    .PivotItems("(blank)").Visible = True

End With
Option Explicit

Public Sub FilterOutZeroAndBlanks()

    Dim pvt As PivotTable

    Set pvt = ThisWorkbook.Worksheets("DATApivot").PivotTables("PivotTable7")
    Dim pvtField As PivotField
    Set pvtField = pvt.PivotFields("AmtIncurred")

    Dim item As PivotItem
    Dim counter As Long
    Dim targetCounter As Long

    With pvtField

       For Each item In .PivotItems

           If item.Visible Then counter = counter + 1

       Next item

       If .PivotItems("0").Visible And .PivotItems("(blank)").Visible Then
            targetCounter = 2
       ElseIf .PivotItems("0").Visible Or .PivotItems("(blank)").Visible Then
            targetCounter = 1
       End If

       If Not targetCounter = counter Then

           .PivotItems("0").Visible = False
           .PivotItems("(blank)").Visible = False

       End If

    End With

End Sub

也许有更好的方法,但这里有一个。注意:在尝试取消选中零和空之前,我正在检查是否始终有1项可见

Sheets("DATApivot").Select
ActiveSheet.PivotTables("PivotTable7").PivotFields("AmtIncurred").CurrentPage _
    = "(All)"
With ActiveSheet.PivotTables("PivotTable7").PivotFields("AmtIncurred")
    .PivotItems("0").Visible = True
    .PivotItems("(blank)").Visible = True

End With
Option Explicit

Public Sub FilterOutZeroAndBlanks()

    Dim pvt As PivotTable

    Set pvt = ThisWorkbook.Worksheets("DATApivot").PivotTables("PivotTable7")
    Dim pvtField As PivotField
    Set pvtField = pvt.PivotFields("AmtIncurred")

    Dim item As PivotItem
    Dim counter As Long
    Dim targetCounter As Long

    With pvtField

       For Each item In .PivotItems

           If item.Visible Then counter = counter + 1

       Next item

       If .PivotItems("0").Visible And .PivotItems("(blank)").Visible Then
            targetCounter = 2
       ElseIf .PivotItems("0").Visible Or .PivotItems("(blank)").Visible Then
            targetCounter = 1
       End If

       If Not targetCounter = counter Then

           .PivotItems("0").Visible = False
           .PivotItems("(blank)").Visible = False

       End If

    End With

End Sub

只需在代码的筛选部分之前的下一步添加一个On Error Resume,然后添加一个On Error Goto 0,这样,通过尝试筛选不存在的项而生成的任何错误都将被忽略:

Sub Macro1()

Dim pt As PivotTable
Dim pf As PivotField

Set pt = ActiveSheet.PivotTables("PivotTable1")
Set pf = pt.PivotFields("Value")
With pf
    .ClearAllFilters
    On Error Resume Next
        .PivotItems("(blank)").Visible = False
        .PivotItems("0").Visible = False
    On Error GoTo 0
End With
End Sub

什么意思,
取消选择0
?我在你的代码中看到的唯一的
0
是说
Visible=True