从筛选的单元格中选择一个选项

时间:2013-02-04 09:50:41

标签: vba excel-vba excel

我是VBA的新手,所以我无法做到这一点。

我在工作簿中有21张。我想在第3张(包含数据透视表)中选择一个我能够做的单元格。这个单元格B3包含一个过滤器,我可以从过滤后的下拉菜单中选择如何对数据进行排序。它包含我是否要按名字或姓氏或所有过滤。

我通常的例程是先按名字选择,然后复制过滤后的数据并将其粘贴到另一张纸上。然后返回到相同的工作表并按姓氏过滤,然后复制过滤后的数据并将其粘贴到我粘贴早期数据的工作表上。

我需要帮助的是以下内容:

  1. 如果选中任何或所有复选框,则取消选中它们。
  2. 在过滤器下拉列表中选择first_name复选框
  3. 取消选择first_name框并选择last_name框
  4. 最后取消选择last_name,然后选中所有复选框
  5. 我使用了以下代码

    Public Sub Open_Sheet3()
    Workbooks("MASTER.xlsx").Activate
    ActiveWorkbook.Sheets("Sheet3").Activate
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Technology").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Technology")
    .PivotItems("Mobility").Visible = False
    .PivotItems("(blank)").Visible = False
    .PivotItems("Enterprise Messaging Tech").Visible = False
    End With
    End Sub
    

1 个答案:

答案 0 :(得分:0)

此代码应该按照您的意愿执行。只需替换工作表/数据透视表/数据透视表字段的名称,然后填写copyStuff子。

Private Sub YourProcedure()
    SelectItem "first_name"
    CopyStuff

    SelectItem "last_name"
    CopyStuff

    SelectItem "all" 'in case you have an element called "all"
    CopyStuff

    SelectAll 'In case you mean the "(All)" 'element', i.e. include everything
    CopyStuff

End Sub

Private Sub SelectItem(strItemName As String)
    Dim i As Integer

    'Change to your worksheet/pivot talbe/pivot field name!
    With Worksheets("Sheet 1").PivotTables("PivotTable1").PivotFields("a")

        .PivotItems(1).Visible = True 'at least one item always needs to be visible
        For i = 2 To .PivotItems.Count
            .PivotItems(i).Visible = False
        Next
        .PivotItems(strItemName).Visible = True
        If .PivotItems(1).Name <> strItemName Then .PivotItems(1).Visible = False

    End With
End Sub

Private Sub SelectAll()
    Dim i As Integer

    'Change to your worksheet/pivot talbe/pivot field name!
    With Worksheets("Sheet 1").PivotTables("PivotTable1").PivotFields("a")
        For i = 1 To .PivotItems.Count
            .PivotItems(i).Visible = True
        Next
    End With
End Sub

Private Sub CopyStuff()
    'Your code goes here
End Sub

一些解释:

如果要取消选择枢轴字段的项目,则需要确保至少在任何时候选择了项目。因此,您无法取消选择所有项目,然后选择所需项目 - 而是选择第一项,取消选择所有项目,选择项目并取消选择第一项,除非它是您的项目。这就是SelectItem正在做的事情