Я имитирую клик на Excel Slicer с помощью VBA, но столкнулся с серьезными проблемами производительности.Плохое обновление производительности Excel выбор слайсера с помощью VBA
Пользователь нажимает на столбец с датами на оси X. При нажатии на столбец соответствующая дата выбирается в слайсере, содержащем список дат. Список будет продолжать расти со временем.
Единственный способ, насколько мне известно, установить выбор слайсера для источников данных, отличных от OLAP (мой случай), это установить отдельно = true для каждого элемента slicer. По мере того, как пересчет срабатывает при каждой настройке, это очень медленно для слайсеров со многими элементами.
Небольшой пример кода, показывающий эту проблему:
On Error GoTo Err_Handler:
Dim SC As SlicerCache
Set SC = ActiveWorkbook.SlicerCaches("Slicer_DATE")
Dim SI As SlicerItem
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each SI In SC.SlicerItems
SI.Selected = True
Next
Err_Handler:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Аналогичные вопросы были заданы перед:
Selecting multiple slicer items at once without a refresh
Pivot Slicer Update To Slow, Can I pause all functions until slicer update is complete?
Там предложение либо:
Application.EnableEvents = false
или
Application.Calculation = xlCalculationManual
UPDATE: Я также заметил, что, несмотря на выключая события и расчет, все сводные таблицы в самом деле перерасчета!
Для меня ни один из этих вариантов не работает и не улучшает производительность. Вычисление действительно отложено и никаких событий не происходит. Тем не менее, каждая итерация выбранного = true занимает около 1,5 секунд. В общей сложности операция занимает около 5 минут.
Мой слайсер подключен к 23 сводным таблицам (!) На нескольких листах. Базовые данные (соединение MS Access DB) составляют около 60 000 строк с ~ 20 переменными, что не так много.
Любая помощь приветствуется.
спасибо. Мне удалось решить проблему. Только проблема заключается в том, что при настройке ManualUpdate = False все форматирование пользовательских серий теряется, и я должен записать макрос для запуска в конце кода, чтобы правильно установить форматирование. – Jonas
Рад, что это помогло! Спасибо за продолжение! – ARich
Я пробовал все вышеперечисленное, и все еще была заметная задержка в одном из моих slicers, у которого было 50+ опций (у меня есть 4 каскадных слайсера). Установка значения Selected выполняется медленно, в моем случае установка всех, кроме одного, значения false. Я ускорил его, проигнорировав те, которые имеют «.hasdata = false», потому что установка их в false не влияет на выбранные значения следующих зависимых slicers. – DWiener