无法使用VBA更新切片器值

时间:2017-11-06 14:24:58

标签: excel vba excel-vba

以下是我用来更新切片器值的代码。

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

国家/地区变量未更新其值(仅取值)。 我不明白这个的原因。 我试图将地图链接到宏,因此输入。

1 个答案:

答案 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