Экран обновления Excel из функции VBA (ошибка 1004)

Я пытаюсь изменить slicer в моем документе excel с кодом VBA. До сих пор я пробовал практически все, и я всегда получаю ту же ошибку:

Run-time error '1004': Application-defined or object-defined error 

Вот мой текущий код VBA.

 Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String, ByVal isSelected As Boolean) ActiveWorkbook.SlicerCaches(SlicerName).SlicerItems(slicerVal).Selected = isSelected End Sub 'Selects slicer values to display only data for 17-year old male students Sub SelectMale17Profile() SelectSlicerValue "Slicer_Age1", "17", True End Sub 

Я верю, что где-то читал, что мне нужно включить свойства чтения / записи slicer, прежде чем я смогу динамически изменять выбранные фильтры. Как мне это сделать?

@SiddharthRout – Спасибо за ваш ответ! Да, я использую powerpivot для подключения к моей базе данных sql. Это проблема, или все еще можно изменить слайсер с помощью VBA? – ТобиасКнудсен 6 часов назад

Если ваша сводная таблица получает данные из внешнего источника, используйте коллекцию SlicerCacheLevels для циклического SlicerCacheLevels элементов в slicer и выполняйте то, что вы хотите. Например

 'Selects slicer values to display only data for 17-year old male students Sub SelectMale17Profile() SelectSlicerValue "Slicer_Age1", "17", True End Sub Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String, ByVal isSelected As Boolean) Dim oSitm As SlicerItem Dim oSlvl As SlicerCacheLevel For Each oSlvl In ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels For Each oSitm In oSlvl.SlicerItems If oSitm.Value = slicerVal Then oSitm.Selected = isSelected Next Next End Sub 

С другой стороны, я думаю, это то, что вы пытаетесь сделать? Я удалил isSelected .

 'Selects slicer values to display only data for 17-year old male students Sub SelectMale17Profile() SelectSlicerValue "Slicer_Age1", "17", True End Sub Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String) Dim oSitm As SlicerItem Dim oSlvl As SlicerCacheLevel For Each oSlvl In ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels For Each oSitm In oSlvl.SlicerItems If oSitm.Value = slicerVal Then oSitm.Selected = True Else oSitm.Selected = False End If Next Next End Sub 
Давайте будем гением компьютера.