以下是我用来更新切片器值的代码。
Sub country_select()
Application.ScreenUpdating = False
country_selected = ActiveSheet.Shapes(Application.Caller).Name
ActiveWorkbook.SlicerCaches("Slicer_Country").ClearManualFilter
For Count = 1 To 13 'countries
country = Sheet5.Range("E2").Offset(Count, 0).Value
If country = country_selected Then
ActiveWorkbook.SlicerCaches("Slicer_Country").SlicerItems(country).Selected = True
Else
ActiveWorkbook.SlicerCaches("Slicer_Country").SlicerItems(country).Selected =
False
End If
Next Count
Application.ScreenUpdating = True
End Sub
国家/地区变量未更新其值(仅取空值)。 我不明白这个的原因。 我试图将地图链接到宏,因此输入。
答案 0 :(得分:0)
我不确定为什么你需要在E3:E14范围内进行交流。如果您只想将切片器设置为显示与用户选择的形状相对应的项目,我会使用以下内容:
Option Explicit
Sub country_select()
Dim si As SlicerItem
Dim Country As String
Dim sc As SlicerCache
Application.ScreenUpdating = False
Country = ActiveSheet.Shapes(Application.Caller).Name
Set sc = ActiveWorkbook.SlicerCaches("Slicer_Country")
With sc
.ClearAllFilters
For Each si In sc.SlicerItems
If si.Name <> Country Then si.Selected = False
Next si
End With
Application.ScreenUpdating = True
End Sub
请注意,如果切片器用于数据透视表(而不是表),我会在循环之前将数据透视表的.ManualUpdate属性设置为TRUE,之后设置为FALSE,以便数据透视表不尝试更新在每个SlicerItem被选中之后。
如果这是用于数据透视表(而不是表),则根本不需要迭代切片器(这是低效/慢速)。相反,只需将Country字段作为PageField放在Pivot中,然后直接设置PageField的.CurrentPage,如下所示:
Sub FilterPivot()
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Country")
pf.CurrentPage = Application.Caller
End Sub