使用vba取消选择数据透视表中的所有项目

时间:2012-12-07 17:31:22

标签: vba excel-vba excel

有些人可以解释一下取消选择新创建的数据透视表中的所有项目的方式,以便我可以返回并只选择一个或两个项目吗?我尝试了以下方法:

.PivotItems("(Select All)").Visible = False

感谢。

5 个答案:

答案 0 :(得分:8)

这可能是你能得到的最接近你想要的东西:

Dim i As Long
.PivotItems(1).Visible = True
For i = 2 To .PivotItems.Count
    .PivotItems(i).Visible = False
Next

这将使第一个选项成为唯一选择的选项(假设它位于a指向pivotfield的范围内)。如果您事先知道自己想要什么......请相应修改。

答案 1 :(得分:2)

我发现循环遍历每个数据项需要花费大量时间,如果您想要在枢轴中的单个项目上进行过滤而不循环遍历所有项目,则可以使用以下代码:

ActiveSheet.PivotTables("Your Pivot Name").PivotFields("Your Field Name").ClearAllFilters
ActiveSheet.PivotTables("Your Pivot Name").PivotFields("Your Field Name").PivotFilters.Add _
    Type:=xlCaptionEquals, Value1:="Your string here" 

这基本上是一个标签过滤器,但它对我有用。

答案 2 :(得分:1)

检查以下内容。选择特定字段名称的数据。请注意,默认情况下您必须至少选择一个项目。并且不要忘记,如果要隐藏项目,只能隐藏数据透视表字段中的连续项。也许在页面加载,或打开工作表或任何其他子触发器时,您可以选择基于特定字段选择的特定项目。然后让你的代码继续其他任何事情。

Sub specificItemsField()
Dim pf As PivotField
Dim pi As PivotItem
Dim strPVField As String

strPVField = "Field Name"
Set pt = ActiveSheet.PivotTables(1)
Set pf = pt.PivotFields(strPVField)
Application.ScreenUpdating = False
Application.DisplayAlerts = False

On Error Resume Next
    pf.AutoSort xlManual, pf.SourceName
     For Each pi In pf.PivotItems
         pi.Visible = True
     Next pi
    pf.AutoSort xlAscending, pf.SourceName

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub       

答案 3 :(得分:0)

这是我自定义过滤器选择的方法。由于双循环可能会变慢。

Dim toSelect(1 To 3) As String

toSelect(1) = "item1"
toSelect(2) = "item2"
toSelect(3) = "item3"


For Each pvItem In objField.PivotItems
    For Each st In toSelect
        If pvItem.Value = st Then
            pvItem.Visible = True
            Exit For
        Else
            pvItem.Visible = False
        End If
    Next
Next

答案 4 :(得分:0)

好吧。

因为您没有隐藏所有内容的方法,因为始终需要显示1个项目

我这样做:

我开始隐藏第一个字段,然后转到下一个字段,先显示所有需要显示的字段,然后转到第二个项目并隐藏,然后再次显示我想要的所有项目,依此类推。然后,任何字段始终可见,并且不会出错。

循环后,我再次尝试显示我想要的所有字段。

使用ActiveSheet.PivotTables(“ TablaD2”)。PivotFields(“ Entity”)

    Dim i As Long

    For i = 1 To .PivotItems.Count

    .PivotItems(i).Visible = False

    .PivotItems("ARG").Visible = True
    .PivotItems("BRL").Visible = True
    .PivotItems("GCB").Visible = True
    .PivotItems("MEX").Visible = True
    Next
    .PivotItems("ARG").Visible = True
    .PivotItems("BRL").Visible = True
    .PivotItems("GCB").Visible = True
    .PivotItems("MEX").Visible = True



End With