我是VBA的新手,需要学习如何在Slicer上自动更改所选值。 我首先尝试了一个非常简单的方法,但是我尝试了以下代码的所有可能变化,并始终收到错误1004,这一次是“应用程序定义的错误或对象定义的错误”
Sub SlicerSelect()
With ActiveWorkbook.SlicerCaches("Slicer_Time")
.SlicerItems("2016").Selected = False
End With
End Sub
有人有想法吗? Here也是我的切片器及其设置的图像。
顺便说一句,当我使用.ClearManualFilter命令时,它可以工作。
非常感谢!
这里也是通过手动过滤我的商品的宏记录:
Sub Macro2()
' Macro2 Macro
ActiveWorkbook.SlicerCaches("Slicer_Time2").VisibleSlicerItemsList = Array( _
"[Booking Period].[Time].[YEAR].&[2018]")
End Sub
答案 0 :(得分:0)
过滤SlicerItems可能很棘手,因为至少有一项必须始终保持可见。这段代码显示了如何在名为vSelection的数组上过滤切片器,并向您展示了如何实现此目的。
Option Explicit
Sub FilterSlicer()
Dim slr As Slicer
Dim sc As SlicerCache
Dim si As SlicerItem
Dim i As Long
Dim vItem As Variant
Dim vSelection As Variant
Set sc = ActiveWorkbook.SlicerCaches("Slicer_ID")
'Set sc = slr.SlicerCache
vSelection = Array("B", "C", "E")
For Each pt In sc.PivotTables
pt.ManualUpdate = True 'Stops PivotTable from refreshing after each PivotItem is changed
Next pt
With sc
'At least one item must remain visible in the Slicer at all times, so make the first
'item visible, and at the end of the routine, check if it actually *should* be visible
.SlicerItems(1).Selected = True
'Hide any other items that aren't already hidden.
'Note that it is far quicker to check the status than to change it.
' So only hide each item if it isn't already hidden
For i = 2 To .SlicerItems.Count
If .SlicerItems(i).Selected Then .SlicerItems(i).Selected = False
Next i
'Make the PivotItems of interest visible
On Error Resume Next 'In case one of the items isn't found
For Each vItem In vSelection
.SlicerItems(vItem).Selected = True
Next vItem
On Error GoTo 0
'Hide the first PivotItem, unless it is one of the countries of interest
On Error Resume Next
If InStr(UCase(Join(vSelection, "|")), UCase(.SlicerItems(1).Name)) = 0 Then .SlicerItems(1).Selected = False
If Err.Number <> 0 Then
.ClearAllFilters
MsgBox Title:="No Items Found", Prompt:="None of the desired items was found in the Slicer, so I have cleared the filter"
End If
On Error GoTo 0
End With
For Each pt In sc.PivotTables
pt.ManualUpdate = False
Next pt
End Sub
答案 1 :(得分:0)
您的问题是数据透视表有两种不同类型: