Подсчет элементов, выбранных в слайсере - PullRequest
1 голос
/ 16 февраля 2020

Я начал работать над таблицей Excel, и для запуска вычисляемого поля мне нужна функция c, которая возвращает количество элементов, выбранных в одном слайсере. Я просмотрел inte rnet, но, к сожалению, мне удалось найти только коды VBA, которые на самом деле не работают вообще. Я начал работать с VBA только недавно, поэтому у меня нет опыта работы с ним.

Мне удалось использовать этот код, который, однако, не является публичной c функцией, поэтому его нельзя использовать в вычисляемых полях в сводных таблицах:

    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

Кто-нибудь из вас сталкивался? решить эту проблему и найти способ ее решения?

Заранее спасибо!

1 Ответ

0 голосов
/ 16 февраля 2020

Это должно сработать:

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 деталь, чтобы сделать формулу динамической c, то есть она всегда будет пересчитываться каждый раз, когда вы меняете выбор слайсера.
  • On Error ... и If Not IsError ... детали на самом деле не требуются, вы можете просто оставить lngCount часть самостоятельно. Если формула не найдет слайсер с именем «Producer», она просто вернет #VALUE! error.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...