Фильтровать слайсер по значению ячейки - PullRequest
0 голосов
/ 06 мая 2019

Я хочу иметь возможность фильтровать слайсер по содержанию значения ячейки, которое я набираю вручную на листе.

У меня есть слайсер "country_of_origin", который управляет тремя сводными таблицами«заявки», «решения», «приглашения».Я хотел бы отфильтровать слайсер по «стране происхождения», которую я ввожу вручную в ячейку B2, не прокручивая весь список стран в списке слайсеров.

Я пытался записать макрос, но это былодля меня это не решение, потому что оно не будет работать, если я вручную введу название страны в ячейку на листе.Выглядело это так:

slicer_Country_of_origin")
        .SlicerItems("ALBANIA").Selected = True
        .SlicerItems("AFGHANISTAN").Selected = False
        .SlicerItems("ALGIERIA").Selected = False
        .SlicerItems("ARMENIA").Selected = True
    End With
End Sub

Далее я нашел на форуме mrexcel.com код, скопировал его, изменив имя слайсера на «страну происхождения» и положение ячейки на «$ b $ 2».".

sub Macro6()   
' sheet module
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim sc As SlicerCache, si As SlicerItem
        If Target.Address = "$B$2" Then                    
            Set sc = ActiveWorkbook.SlicerCaches("Country of origin")      ' desired slicer
            sc.ClearAllFilters
            For Each si In sc.SlicerItems
                If si.Caption = CStr(Target) Then
                    si.Selected = True
                Else
                    si.Selected = False
                End If
            Next
        End If
    End Sub

После запуска этого макроса после строки sub Macro6() я получил сообщение:

Ошибка компиляции: Ожидаемый конец подпрограммы.

Я хотел бы преобразовать / исправить код, чтобы он соответствовал моим потребностям, а именно: фильтровать срезы по содержанию значения ячейки, которое я печатаю вручную на листе. **

1 Ответ

1 голос
/ 06 мая 2019

Ваш код недействителен.Это должно быть

sub Macro6()   
' sheet module
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sc As SlicerCache, si As SlicerItem
    If Target.Address = "$B$2" Then                    
        Set sc = ActiveWorkbook.SlicerCaches("Country of origin")      ' desired slicer
        sc.ClearAllFilters
        For Each si In sc.SlicerItems
            If si.Caption = CStr(Target) Then
                si.Selected = True
            Else
                si.Selected = False
            End If
        Next
    End If
End Sub

Обратите внимание, что Worksheet_Change является событием и не отображается в списке, где вы можете запускать макросы.Этот макрос не может быть запущен вручную, он автоматически запускается каждый раз при изменении ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...