|
Excel / VBA: Создать массив элементов из структуры
|
|||
---|---|---|---|
#18+
Привет! Есть книга Эксель с защищенными листами (выборочно настройки защиты для каждого листа). - программно снимаю с этих листов защиту; - обновляю сводную таблицу. Но при изменении данных таблицы источника, старые отборы пропадают (я это свойство уже включил, чтобы не сохранялись неиспользуемые значения), иначе в списке фильтра остаются давно не использующиеся элементы. Что я хочу: - запоминать отмеченные элементы фильтра сводной таблицы перед обновление таблицы и очисткой её фильтра; - восстанавливать значения отметок сохраненных элементов фильтра. Что я уже сделал: - отловил измение сводной таблицы; - снимаю защиту с листов; - создал массив, куда помещаю значения отбора (поля .Name, .Value, .Visible); - программно обновляю своднюу таблицу на указанном листе; - устанавливаю защиту каждого листа с индивидуальными для него флагами доступа. Что у меня не получается: - создать массив из структурированных элементов: String и Boolean, я умею только создать массив, в котором все элементы String. Вот кусок кода моего поделия: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
Вот после строки Sheets("План по областям").PivotTables("СводнаяТаблица2").PivotFields("Показатель").ClearAllFilters я хочу снова перебрать коллекцию значений фильтра и сделать следующее: - получить имя текущего фильтра; - попытаться найти по этому имени поле в сохраненном массиве настроек фильтра; - если элемент найден, то у текущего элемента установить флаг Visible, равный значению поля Visible в найденной строке массива; - если элемент с таким именем отсутствует, то установить флаг Visible=false, пусть пользователь фидит только совпадающие с новыми значениями, фильтры. Может, надо было взять и не массив для сохранения предыдущего элемента, а таблицу значений с типизированными колонками, а то и вовсе всю структуру настроек фильтра скопировать -- на данном этапе мне все равно, надо, чтобы работало. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 18:18 |
|
Excel / VBA: Создать массив элементов из структуры
|
|||
---|---|---|---|
#18+
Пробовал еще так заполнить: If .Visible = True Then iArr(iColumn, 3) = "True" Else iArr(iColumn, 3) = "False" Пишет, смешение типов: Type mismatch ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 19:41 |
|
Excel / VBA: Создать массив элементов из структуры
|
|||
---|---|---|---|
#18+
Вот в отладчике рассмотрел: Просмотр дерева объекта говорит, что у Item1.Visible тип значения Boolean, значение True. Но при получении этого значения .Visible тип значения Long, значение -1. Это может быть если я обращаюсь не по полному пути к свойству объекта, а при помощи оператора With? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 11:36 |
|
|
start [/forum/topic.php?fid=61&msg=39375508&tid=2172819]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 429ms |
0 / 0 |