0

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

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

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

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

  1. 如果选中任何或所有复选框,则取消选中它们。
  2. 选择过滤器下拉列表中的 first_name 复选框
  3. 取消选择 first_name 框并选择 last_name 框
  4. 最后取消选择last_name,然后选择所有复选框

我使用了以下代码

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
4

1 回答 1

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正在做的事情

于 2013-02-04T13:38:16.913 回答