使用VBA宏切换透视表过滤器(按钮)

使用VBA宏切换透视表过滤器(按钮),vba,excel,pivot-table,Vba,Excel,Pivot Table,我需要一些简单的宏的帮助,但我做不到。所以我只想在滤镜之间切换——我有两种可能,举个例子,两种颜色——黑色和白色,我现在只想有其中一种(我想添加按钮,这样它就可以作为切换)。情况是这样的 我尝试过有条件的,当然不起作用,但希望它能帮助你理解我的想法。如果一个过滤器处于启用状态,则另一个过滤器处于禁用状态(因此与之连接的对象显然也处于禁用状态) If有些问题,因为它是红色的,我得到了“Complie error:Syntax error”信息您需要将然后与If放在同一行。(您可以使用\u告诉VB

我需要一些简单的宏的帮助,但我做不到。所以我只想在滤镜之间切换——我有两种可能,举个例子,两种颜色——黑色和白色,我现在只想有其中一种(我想添加按钮,这样它就可以作为切换)。情况是这样的

我尝试过有条件的,当然不起作用,但希望它能帮助你理解我的想法。如果一个过滤器处于启用状态,则另一个过滤器处于禁用状态(因此与之连接的对象显然也处于禁用状态)


If有些问题,因为它是红色的,我得到了“Complie error:Syntax error”信息

您需要将
然后
If
放在同一行。(您可以使用
\u
告诉VBA“代码在下一行继续”)

您的
设置也不正确,在检查“黑色”和“白色”是否可见之前,您是否使它们可见

试试这个:

Sub ToggleColour()
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("colour")
        If .PivotItems("white").Visible=True Then
            .CurrentPage = "black"
        Else
            .CurrentPage = "white"
        End If
    End With
End Sub

这就是切片机的用途

将光标放在数据透视表数据区域内。然后转到插入>切片器>并选择
color
。然后,您将拥有一个切片器,它允许您选择或。我不知道您是否可以在当前excel版本中禁用multiselect,以便用户可以按ctrl键并同时选择两者。但这似乎是一个简单的方法

或者,您可以运行如下代码,然后用户只需在“收件人”字段中键入黑色或白色,然后应用过滤器:

Sub Test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pvt As PivotTable

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet3")
    Set pvt = ws.PivotTables("PivotTable3")

    Dim pvtField As PivotField
    Dim item As Long
    Dim item2 As Long

    Set pvtField = pvt.PivotFields("Colour")

    pvtField.EnableItemSelection = False

End Sub

您可以将代码包含在内联标记中,这将更容易提供帮助。但从你的问题来看,还不清楚“什么不起作用”在End SubAlso之前没有End If,语法是If Then…Else End If。因此,另一个语法错误是,在Then之前有两行没有形成有效的测试条件集。并且没有使用行延续,因此我担心此代码需要进行大量更正才能运行。\n只是-没有链接到数据透视表更新事件的请求,特别是因为运行宏会触发该事件!哇,对我来说非常好!我做了一个按钮,用它来做我的道具数据,我很高兴。谢谢很高兴听到这个消息!请不要忘记点击“接受答案”按钮,这样问题就会从“未回答”列表中删除谢谢!当然,我每天都在使用切片器,但我也想开始制作宏,所以这就是重点。
Sub Test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pvt As PivotTable

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet3")
    Set pvt = ws.PivotTables("PivotTable3")

    Dim pvtField As PivotField
    Dim item As Long
    Dim item2 As Long

    Set pvtField = pvt.PivotFields("Colour")

    pvtField.EnableItemSelection = False

End Sub