Экран обновления 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