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
基于选项按钮表单控件过滤透视表的VBA函数_Vba_Excel - Fatal编程技术网

基于选项按钮表单控件过滤透视表的VBA函数

基于选项按钮表单控件过滤透视表的VBA函数,vba,excel,Vba,Excel,我有一个透视表,其中有一列包含文本。我还有5个选项按钮。通过VBA代码,我想过滤数据透视表中包含特定文本的列。我需要五个不同的contains函数来解释各种组合。然后我计划将这些宏分配给选项按钮。我浏览过各种论坛,但无法按照他们所描述的方式运行,他们也从未按照我在这里所描述的方式构建过 这是我到目前为止对其中3个按钮所做的,但当我点击一个按钮并点击另一个按钮时,我发现一个错误: Sub Incr_Phys() ' ' Incr_Phys Macro ' ' ActiveSheet.Pi

我有一个透视表,其中有一列包含文本。我还有5个选项按钮。通过VBA代码,我想过滤数据透视表中包含特定文本的列。我需要五个不同的contains函数来解释各种组合。然后我计划将这些宏分配给选项按钮。我浏览过各种论坛,但无法按照他们所描述的方式运行,他们也从未按照我在这里所描述的方式构建过

这是我到目前为止对其中3个按钮所做的,但当我点击一个按钮并点击另一个按钮时,我发现一个错误:

Sub Incr_Phys()
'
' Incr_Phys Macro
'

'
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Eligible Win Type"). _
        PivotFilters.Add2 Type:=xlCaptionContains, Value1:="Incr Phys"
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
End Sub
Sub All_Win_Types()
'
' All_Win_Types Macro
'

'
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Eligible Win Type"). _
        PivotFilters.Add2 Type:=xlCaptionContains, Value1:="?"
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
End Sub
Sub Acq()
'
' Acq Macro
'

'
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Eligible Win Type"). _
        ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Eligible Win Type"). _
        PivotFilters.Add2 Type:=xlCaptionContains, Value1:="Acq"
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
End Sub

很明显,您已经录制了一个宏来捕获VBA,作为从何处开始的示例。非常好的移动,因为这可以揭示一些你不知道的方法。完成后,您可以做一些事情来帮助调试代码,并帮助更清楚地看到发生了什么

  • 编辑代码以删除
    激活
    选择
    
    
  • 定义并设置对
    工作表
    工作簿
    的引用。这将有助于您在以后扩展工作时避免出现问题
  • 当您遇到未知问题时,请将单个复合语句的各个部分分开。这样,您就可以准确地分离出操作的哪一部分导致了错误。我在下面这样做是为了访问数据透视表的不同部分
  • 我认为您缺少的是在重新应用新筛选器之前清除所有筛选器

    Option Explicit
    
    Sub Incr_Phys()
    '
    ' Incr_Phys Macro
    '
        Dim thisWB As Workbook
        Dim pivotWS As Worksheet
        Set thisWB = ThisWorkbook
        Set pivotWS = thisWB.Sheets("Sheet5")
    
        Dim thisPT As PivotTable
        Dim winType As PivotField
        Set thisPT = pivotWS.PivotTables("PivotTable1")
        Set winType = thisPT.PivotFields("Eligible Win Type")
        With winType
            .ClearAllFilters
            .PivotFilters.Add2 Type:=xlCaptionContains, Value1:="Incr Phys"
        End With
    End Sub
    

    您必须将每个复选框的状态合并到表的筛选器中。您的代码看起来像什么?@peterT-->我实际上选择了返回单选按钮,并添加了一个显示为“全部”的单选按钮。所以总共有6个单选按钮。如果选择了五个选项中的一个,则表格应根据包含该特定文本的值进行筛选。如果选择“全部”,则应过滤包含5个特定文本中任何一个的值。现在我又回到原点了@皮特,我在这里为前三个按钮添加了当前代码。然而,它告诉我在使用单选按钮时,在这个区域周围有一个bug:ActiveSheet.PivotTables(“PivotTable1”)。PivotFields(“符合条件的Win类型”)。\PivotFilters.Add2类型:=xlCaptionContains,值1:=“增量物理”