我有一个数据透视表,其中有一个切片器,用户可以在其中进行多项选择。我试图在切片器中列出选定的值,以便然后可以使用 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
答案1
这是一个用户定义函数,您可以直接从为您执行此操作的工作簿中调用它,并且可以在任何类型的切片器上运行,无论是“传统”数据透视表、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
它看起来是这样的: