Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/История спасения одного файла (VBA) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
История спасения одного файла (VBA)
Rioran Дата: Пятница, 31.03.2017, 17:12 | Сообщение № 1
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Всем привет!

Был сегодня интересный случай. Коллеги из другого отдела попросили посмотреть, почему казалось бы лёгкий файл (4 Mb) висит и работает разве что из-под палки. А для коллеги этот файл основной, с ним приходится работать большую часть времени. Ждать по минуте после изменения каждой ячейки - удовольствие сомнительное.

Смотрю файл. Много листов. Ломанных имён диапазонов нет, только полдюжины нормальных. Пара ссылок на другие файлы тоже выглядят адекватно. На многих листах классическая ошибка с заданием диапазона целиком на весь столбец "A:A", но на всех листах отсилы тысяча строк - то есть тоже не ключевой момент в данном случае. На многих листах используются излишние условные форматирования, но не более 10 штук на лист. При сохранении файла сжимаю возможные графические объекты до почтового формата (92 bpi). Файл худеет где-то на 10-20 Kb. Мало, но это оказалось важно в дальнейшем.

Начинаю подозревать остаточное форматирование и лист за листом обнуляю всё за пределами UsedRange. Файл похудел лишь на 20 Kb, копейки. И тут замечаю, что на одном и том же конкретном листе мой довольно сильный ноут начинает тормозить. Ага, это зацепка. Начинаю внимательнее смотреть каждую строку широкой таблицы. На одной из них вижу маленькую иконку-рисунок. Этакий мини пергамент. Выделяю. В окне имён вижу приставку "167". Сходу генерирую гипотезу, что таких иконок где-то прячется минимум полторы сотни штук. Чтобы узнать точно - достаю волшебную палочку (окно "Immediate" в VBA-редакторе) и колдую заклинание:

[vba]
Код
?ActiveSheet.DrawingObjects.Count
[/vba]
Каково же было моё удивление, когда в ответ я получил цифру... 50 тысяч. Но паниковать мне по должностной инструкции не положено, так что вслед за первым заклятьем (разумеется, после заверения клятвы коллеги что никаких рисунков быть не должно) летит такое же простое и бесхитростное второе:

[vba]
Код
?ActiveSheet.DrawingObjects.Delete
[/vba]
Спустя пять минут файл задышал новой жизнью, воскрес словно феникс из пепла и залетал даже на слабеньком компьютере коллеги. Из 4-х Mb и без того .xlsb формата осталось 3 Mb. Счастливый конец.

Послесловие. Думаю, предыдущий владелец файла любил излишне украшать строки. И, разумеется, оставлял каждому маленькому рисунку настройки по умолчанию: менять положение и размер при любом изменении размеров и положения ячеек. В файле большое количество раз удалялись и добавлялись строки, что приводило к экспоненциальному росту сжавшихся до пикселя большинства картинок. Случай, наверно, классический, но своими глазами суровые последствия я увидел впервые =)

А какие у Вас были истории спасения файлов?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеВсем привет!

Был сегодня интересный случай. Коллеги из другого отдела попросили посмотреть, почему казалось бы лёгкий файл (4 Mb) висит и работает разве что из-под палки. А для коллеги этот файл основной, с ним приходится работать большую часть времени. Ждать по минуте после изменения каждой ячейки - удовольствие сомнительное.

Смотрю файл. Много листов. Ломанных имён диапазонов нет, только полдюжины нормальных. Пара ссылок на другие файлы тоже выглядят адекватно. На многих листах классическая ошибка с заданием диапазона целиком на весь столбец "A:A", но на всех листах отсилы тысяча строк - то есть тоже не ключевой момент в данном случае. На многих листах используются излишние условные форматирования, но не более 10 штук на лист. При сохранении файла сжимаю возможные графические объекты до почтового формата (92 bpi). Файл худеет где-то на 10-20 Kb. Мало, но это оказалось важно в дальнейшем.

Начинаю подозревать остаточное форматирование и лист за листом обнуляю всё за пределами UsedRange. Файл похудел лишь на 20 Kb, копейки. И тут замечаю, что на одном и том же конкретном листе мой довольно сильный ноут начинает тормозить. Ага, это зацепка. Начинаю внимательнее смотреть каждую строку широкой таблицы. На одной из них вижу маленькую иконку-рисунок. Этакий мини пергамент. Выделяю. В окне имён вижу приставку "167". Сходу генерирую гипотезу, что таких иконок где-то прячется минимум полторы сотни штук. Чтобы узнать точно - достаю волшебную палочку (окно "Immediate" в VBA-редакторе) и колдую заклинание:

[vba]
Код
?ActiveSheet.DrawingObjects.Count
[/vba]
Каково же было моё удивление, когда в ответ я получил цифру... 50 тысяч. Но паниковать мне по должностной инструкции не положено, так что вслед за первым заклятьем (разумеется, после заверения клятвы коллеги что никаких рисунков быть не должно) летит такое же простое и бесхитростное второе:

[vba]
Код
?ActiveSheet.DrawingObjects.Delete
[/vba]
Спустя пять минут файл задышал новой жизнью, воскрес словно феникс из пепла и залетал даже на слабеньком компьютере коллеги. Из 4-х Mb и без того .xlsb формата осталось 3 Mb. Счастливый конец.

Послесловие. Думаю, предыдущий владелец файла любил излишне украшать строки. И, разумеется, оставлял каждому маленькому рисунку настройки по умолчанию: менять положение и размер при любом изменении размеров и положения ячеек. В файле большое количество раз удалялись и добавлялись строки, что приводило к экспоненциальному росту сжавшихся до пикселя большинства картинок. Случай, наверно, классический, но своими глазами суровые последствия я увидел впервые =)

А какие у Вас были истории спасения файлов?

Автор - Rioran
Дата добавления - 31.03.2017 в 17:12
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!