将切片器选择添加到列表中的工作表 - Excel VBA


0

我有一个带有切片器的数据透视表,用户可以在其中进行多项选择。我试图在切片器中列出所选的值,以便它们可以使用CONCATENATE在另一个单元格中连接在一起。我正在使用下面的代码。

此时,单元格L5:L7填充了切片器中的第一个选择,但没有其他选择。

我做了一些研究,发现了一个可能的CUBESET功能解决方案,但我无法在我的电子表格中使用它。因此VBA尝试。有人知道它有什么问题吗?

    Sub City_Click()

Dim cache As Excel.SlicerCache
Set cache = ActiveWorkbook.SlicerCaches("Slicer_City")
Dim sItem As Excel.SlicerItem
For Each sItem In cache.SlicerItems

If sItem.Selected = True Then Range("L5").Value = sItem.Name
If sItem.Selected = True Then Range("L6").Value = sItem.Name
If sItem.Selected = True Then Range("L7").Value = sItem.Name

Next sItem

End Sub

Answers:


0

这是一个用户定义函数,您可以直接从为您执行此操作的工作簿中调用,并且可以在任何类型的Slicer上运行,无论是“传统”数据透视表,OLAP / PowerPivot数据透视表还是表切片器。只需将其放在标准代码模块中,然后在工作簿中键入以下内容:

= SlicerItems( “Slicer_City”)

Public Function SlicerItems(SlicerName As String, Optional sDelimiter As String = "|") As String

    Dim oSc As SlicerCache
    Dim oSi As SlicerItem
    Dim i As Long
    Dim lVisible As Long
    Dim sVisible() As String

    On Error Resume Next
    Application.Volatile
    Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
    If Not oSc Is Nothing Then
        With oSc
            If .FilterCleared Then
                SlicerItems = "(All)"
            Else
                If .OLAP Then
                    SlicerItems = Join(.VisibleSlicerItemsList, sDelimiter)
                    SlicerItems = Replace(SlicerItems, .SourceName, "")
                    SlicerItems = Replace(SlicerItems, ".&[", "")
                    SlicerItems = Replace(SlicerItems, "]", "")
                Else

                    lVisible = .VisibleSlicerItems.Count
                    If .VisibleSlicerItems.Count = 1 Then
                        SlicerItems = .VisibleSlicerItems(1).Name
                    Else
                        ReDim sVisible(1 To lVisible)
                        For i = 1 To lVisible
                            sVisible(i) = .VisibleSlicerItems(i).Name
                        Next i
                        SlicerItems = Join(sVisible, sDelimiter)
                    End If
                End If
            End If
        End With
    Else
        SlicerItems = SlicerName & " not found!"
    End If

End Function

以下是它的外观:

在此输入图像描述


凉。我忘了说有一个可选的第二个参数指定要使用的分隔符。默认值为管道字符| 但您可以指定其他字符,例如逗号。
jeffreyweir,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.