我是VBA的新手,所以我无法做到这一点。
我在工作簿中有21张。我想在第3张(包含数据透视表)中选择一个我能够做的单元格。这个单元格B3包含一个过滤器,我可以从过滤后的下拉菜单中选择如何对数据进行排序。它包含我是否要按名字或姓氏或所有过滤。
我通常的例程是先按名字选择,然后复制过滤后的数据并将其粘贴到另一张纸上。然后返回到相同的工作表并按姓氏过滤,然后复制过滤后的数据并将其粘贴到我粘贴早期数据的工作表上。
我需要帮助的是以下内容:
我使用了以下代码
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
答案 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
正在做的事情