我需要通过VBA记下切片器上选择的值(在一个单元格中)。
因此,在具有选项Option A, Option B, Option C
的切片器中,我想要一些代码来触发将Option A|Option C
放入单元格中。
如何触发该代码?我无法开始event
,我尝试右键单击,分配 - 宏/新,但这只是在您点击时触发事件并且不允许您更新切片器。
答案 0 :(得分:1)
虽然我无法想到直接调用与切片器绑定的事件;我已经考虑了一些,并意识到如果你包含一个易失性函数(每次操作后重新计算的函数),例如Worksheet_Calculate
或=NOW()
,你可以在=RAND()
事件中处理你的事件。隐藏在工作表的某个位置(隐藏列中,或更改要混合的字体颜色,以便对用户不可见)。
每次更改切片器参数时,都会重新计算该函数,该函数将调用Worksheet_Calculate
事件。在这种情况下,您可以检索所选项目并将其显示在单元格中。
打开VB编辑器并将以下代码粘贴到您希望使用此功能的工作表代码中:
Private Sub Worksheet_Calculate()
Dim item As SlicerItem
Dim strOutput As String
'Get all selected items from the first slicer
For Each item In ActiveWorkbook.SlicerCaches(1).SlicerItems
If item.Selected = True Then
strOutput = item.Caption & "|" & strOutput
End If
Next item
'If we don't pause macros when we modify the
'cell value, this function will get called again and
'start an infinite loop, so we disable macros for
'the update of the cell value
Application.EnableEvents = False
'Update a cell value with the slicer output
Me.Range("G1").Value = "|" & strOutput
Application.EnableEvents = True
End Sub
在我的测试工作簿中,我添加了一个表格,其中包含有关作者和书籍的信息(作者姓名,书名,价格,评级等),我为作者添加了一个切片器(这是ActiveWorkbook.SlicerCaches(1).SlicerItems
指的切片器到)。
上面的代码会将作者切片器中的选定选项输出到单元格G1
(您可以根据需要进行更改)。我将=NOW()
函数放在单元格L2
中,并将文本设为白色,以便对用户不可见。
在切片器中选择项目的结果是单元格G1,如下所示:
|Clive Barker|Stephen King|
假设这两位作者被选中。
当我选择H.P.代码执行后输出的快照。 Lovecraft和Clive Barker。
这适用于所选的任何内容,当然您可以根据需要更改引用的切片器。请确保在Application.EnableEvents = False
事件中修改单元格值的代码部分周围保留Application.EnableEvents = True
和Worksheet_Calculate
触发器,否则代码将进入无限循环。
我添加了" |"到字符串的开头添加到单元格G1以使其看起来更好(看起来很笨拙的尾随|)但你也可以修剪尾随|使用Me.Range("G1").Value = Left(strOutput, Len(strOutput) - 1)
代替Me.Range("G1").Value = "|" & strOutput
。
这会使输出看起来像这样:
H.P. Lovecraft|Clive Barker
再次假设在切片机中选择了这两位作者。如果你选择了三个,你会得到:
H.P. Lovecraft|Stephen King|Clive Barker
等