如何在发生(不可转移)Table链接切片器更新后触发更新

我需要通过VBAlogging在切片机上select的值(单元格中)。 因此,在带有选项Option A, Option B, Option C的切片机中,我想要一些代码来触发,例如,将Option A|Option C放入单元格中。 如何触发该代码开始? 我找不到开始这个event ,我尝试了右键单击,分配macros/新,但只是触发一个事件,当你点击,不让你更新切片机。

虽然我没有办法直接调用与切片机相关的事件, 我已经考虑了一些,并且意识到如果在Worksheet_Calculate某处包含一个易失性函数(在每个操作之后重新计算的函数),例如=NOW()=RAND() ,则可以在Worksheet_Calculate事件中处理事件无论是在隐藏的列中,还是改变字体颜色以混合,以使用户不可见)。

每次更改切片机参数时,都会重新计算该函数,这将调用Worksheet_Calculate事件。 在这种情况下,您可以检索选定的项目并将其显示在单元格中。

打开VB编辑器,并将以下代码粘贴到您希望使用此function的工作表代码中:

 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 

在我的testing工作簿中,我添加了一个包含作者和书籍(作者姓名,书名,价格,评分等等)信息的表格,并为作者添加了一个切片器(这是ActiveWorkbook.SlicerCaches(1).SlicerItems引用的切片器至)。

上面的代码将输出作者切片器中选定的选项到单元格G1 (您可能会更改以适应您的需要)。 我在单元格L2放置了=NOW()函数,并将文本设置为白色,以便对用户不可见。

在切片机中select项目的结果是单元格G1,看起来像:

|Clive Barker|Stephen King|

假设这两位作者被选中。

当我selectHP Lovecraft和Clive Barker时,代码执行后会有一个输出。

示例输出

这将适用于任何select,当然你可以根据需要更改引用的切片机。 确保在修改Worksheet_Calculate事件中的单元格值的代码部分保持Application.EnableEvents = FalseApplication.EnableEvents = True触发,否则代码将进入无限循环。

我添加了“|” 到要添加到单元格G1的string的开头,使其看起来更好(看起来很尴尬的跟踪|),但你也可以修剪尾部| Me.Range("G1").Value = Left(strOutput, Len(strOutput) - 1)而不是Me.Range("G1").Value = "|" & strOutput Me.Range("G1").Value = "|" & strOutput

这将使输出如下所示:

HP Lovecraft|Clive Barker

再次假设这两位作者是在切片机中select的。 如果你select了三个,你会得到:

HP Lovecraft|Stephen King|Clive Barker

等等。