【问题标题】:Count Elements Selected Within a Slicer计算切片器中选择的元素
【发布时间】:2020-02-16 15:57:35
【问题描述】:

我已经开始处理 Excel 工作表并运行一些计算字段,我需要一个公共函数来返回在单个切片器中选择的项目数。 我上网,但不幸的是,我只能找到实际上根本不起作用的 VBA 代码。 我最近才第一次开始使用 VBA,所以我没有这方面的经验。

我设法使用了这段代码,但它不是公共函数,因此不能在数据透视表的计算字段中使用:

    Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
        Const sSlicerName As String = "Producer"
        On Error Resume Next
        If Not IsError(Target.Slicers(sSlicerName).Name) Then _
            Range("A1") = ActiveWorkbook.SlicerCaches("Slicer_" & sSlicerName) _
             .VisibleSlicerItems.Count
    End Sub

你们中有人遇到过这个问题并找到解决问题的方法吗?

提前谢谢你!

【问题讨论】:

  • 您能否发布您尝试过的代码之一,即使它不起作用?至少,为了更好地了解您的目标是什么……您至少可以在尝试处理该工作表的方式之前和之后发布图像(如果可能的话可编辑)?如果不是,您能否更好地描述“返回单个切片器中选择的项目数”的含义?您的选择是否仅包含一行的单元格?
  • 您可以在上面的问题中找到我尝试实现的代码。我正在寻找的是一个函数,它返回作为数据透视表中过滤器的切片器的一部分的元素。在切片器中,有几个“生产者”,我想知道所选的数量,以便使用这个数字来计算计算字段中的平均值。我希望这能澄清问题,如果没有,请告诉我

标签: excel vba count slicers


【解决方案1】:

这应该可以解决问题:

Public Function CountProducers()
    Dim lngCount As Long
    Const sSlicerName As String = "Producer"

    Application.Volatile

    On Error Resume Next
        If Not IsError(Sheet1.PivotTables("PivotTable1").Slicers(sSlicerName).Name) Then
            lngCount = ThisWorkbook.SlicerCaches("Slicer_" & sSlicerName) _
             .VisibleSlicerItems.Count
        End If
    On Error GoTo 0

    CountProducers = lngCount
End Function

如您所见,您最初的尝试几乎是正确的。需要注意的几点:

  • 我添加了 Application.Volatile 部分以使公式动态化,即,每当您更改切片器选择时,它总是会重新计算。
  • On Error ... 和 If Not IsError... 部件并不是真正需要的,你可以简单地留下 lngCount 部件本身。如果公式找不到名为“Producer”的切片器,它将简单地返回 #VALUE! 错误。

【讨论】:

  • 我注意到如果我清除切片器中的过滤器,它会返回错误的计数。如果您For Each Value In ActiveWorkbook.SlicerCaches("Slicer_" & sSlicerName).VisibleSlicerItems 并在循环中计数,那么您每次都会得到正确的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多