Excel VBA - 在切片器中返回所选元素

Tob*_*sen 7 excel vba excel-vba

我有一个名为'Slicer_HeaderTitle'的切片器.我只需要能够使用所选元素的值对VBA中的变量进行调暗.我一次只能选择一个元素.

由于我的数据透视表连接到外部数据源,因此我通过VBA动态地从切片器中选择和取消选择元素时遇到了很多问题.我不知道这是否与此确切示例相关,但此表连接到相同的外部数据源.

我曾经有一行代码,可以返回这个值,但我现在可以找到的所有内容都要求你遍历切片器中的每个元素并检查它是否被选中.我希望避免这种情况,因为我一次只有一个选定的元素.

在此输入图像描述

' This is what I'm trying to achieve.
Dim sValue as String
sValue = ActiveWorkbook.SlicerCaches("Slicer_HeaderTitle").VisibleSlicerItems.Value

msgbox(sValue)
'Returns: "Uge 14 - 2016 (3. Apr - 9. Apr)"
Run Code Online (Sandbox Code Playgroud)

当前状态:

在此输入图像描述

Tob*_*sen 5

这就是我所做的:

Public Function GetSelectedSlicerItems(SlicerName As String) As String
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem

Set SL = ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels(1)
For Each sI In SL.SlicerItems
    If sI.Selected = True Then
         GetSelectedSlicerItems = (sI.Value)
    End If
Next
End Function


Dim sValue As String
sValue = GetSelectedSlicerItems("Slicer_HeaderTitle")
Run Code Online (Sandbox Code Playgroud)

感谢 Droktor OSwaldo 为我提供了很多帮助!


Dok*_*ldo 4

好的,要找到错误,我们将退一步,删除我的函数并尝试循环遍历项目:

Dim sC As SlicerCache 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Dates_Hie") 
Set SL = sC.SlicerCacheLevels(1)
For Each sI In SL.SlicerItems    
  sC.VisibleSlicerItemsList = Array(sI.Name) 
Next
Run Code Online (Sandbox Code Playgroud)