VBA Отменить выбор всех параметров слайсера (кроме 1) - PullRequest
0 голосов
/ 01 мая 2018

Приведенный ниже код дает странный результат. Слайсер имеет 22 варианта (№ 1 сверху вниз и № 22 снизу).

Если у меня выбран # 12 и запущен код, он выберет опции среза 1-12. Если X = количество выбранных в данный момент параметров слайсера, код выберет 1 - X, а параметры ниже останутся невыбранными. Вышесказанное является лишь примером и не предназначено для демонстрации естественной или желаемой отправной точки.

Другая информация, которая может иметь отношение к теме: Multiselect = True, Вариант 2-го до нижнего = "", Последний вариант - «пусто»

То, что я хочу сделать с кодом, это выбрать параметр с третьего по последний, который является первым (снизу) параметром, который не содержит пустых или нулевых данных. Это объясняет закомментированную строку.

Однако я не могу понять, почему приведенный ниже код не отменяет выбор всех параметров.

Sub Slicer()

Dim WB As Workbook
Set WB = ThisWorkbook
Dim i As Integer
Dim n As Integer



With WB.SlicerCaches("Slicer_Processed_date")
    n = .SlicerItems.Count

    For i = 1 To n
        If .SlicerItems(i).Selected = True Then
            .SlicerItems(i).Selected = False
        End If
    Next i

   '.SlicerItems(n - 2).Selected = True
End With   
End Sub

1 Ответ

0 голосов
/ 01 мая 2018

Вы не можете отменить выбор всех элементов. Вы должны всегда оставлять один элемент видимым, иначе VBA выдаст ошибку.

Если вы хотите, чтобы готовый код фильтровал слайсер по массиву, ознакомьтесь с моим ответом по адресу Как обновить кэш слайсера с помощью VBA

Этот массив может содержать только одну вещь, если хотите. А комментарии в этом коде помогут вам понять, как эффективно фильтровать слайсер.

Редактировать: Теперь, когда я понимаю, что вам нужно, используйте это:

Sub SliceByIndex()


Dim sc As SlicerCache
Dim si As SlicerItem
Dim l As Long
Dim i As Long

Set sc = ThisWorkbook.SlicerCaches("Slicer_Test")

l = sc.SlicerItems.Count
With sc
    .PivotTables(1).ManualUpdate = True 'Stops PivotCache recalculating until we are done

    ' Select the first item, because one item MUST remain visible at all times.
    ' We'll unselected it when we're done
    .SlicerItems(1).Selected = True

    'Deselect everything else
    For i = 2 To l
        .SlicerItems(i).Selected = False
    Next i

    'Select the desired item
    .SlicerItems(l - 2).Selected = True

    'Deselect the first items
    .SlicerItems(1).Selected = False

    'Turn the PivotCache calculation on again
    .PivotTables(1).ManualUpdate = False
End With


End Sub
...