Страницы: 1
RSS
Жуткие тормоза при работе с файлом (*.xlsm)., Варианты оптимизации по ускорению работы .
 
Здравствуйте.
Есть файл расчета теплопотерь помещения с полуавтоматическим подбором отопительных приборов (используются макросы). Сам по себе файл (сравнительно) не тяжёлый, но жутко тормозит (при чем тормоза распространяются на все открытые документы excel).
В файле присутствует макрос на создание сводной таблицы, так вот, ее формирование длилось порядка 3-5 минут (в зависимость от размера файла и мощности ПК). Пришлось в самом макросе запретить автоматический пересчет данных, после этого время сократилась до 20-30 сек.
По мере добавления помещений файл начинает (НЕ РЕАЛЬНО) тормозит.
Подскажите, пожалуйста, что может быть причиной жутких тормозов при работе с данным файлом, и какие могут быть способы по их устранению
Спасибо.
Р.s. Понимаю, что разобраться, как программа работает сложено, поэтому снял коротенький роликкак с ней работать. И прошу с пониманием отнестись к тому, что программа на Украинском языке (переписывать все данные таблиц и тому подобное слишком долго)
Файл в архиве 500 Кб https://docs.google.com/file/d/0B3S8qXQB_TruREtGRC1JUFdNTE0/edit?usp=sharing
 
1. На всех листах промотать скролом вниз по строкам и очистить там где пусто с помощью "главная-очистить-очистить всё"
2. Также для столбцов
3. Удалить ненужные связи на другие книги
4. Уменьшить и/или вообще удалить условные форматирования
5. Если не поможет - тогда корректировать/упрощать Ваши массивные UDF'ки

Ps. Файл не разбирал.
Изменено: LightZ - 25.02.2013 23:15:08
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
3-5 минут ерунда! мне попадалась книга, которая открывалась только более 40 минут.
И при зтом Чел заказывал UDF. Еле уговорил отказаться вообще от формул и функций.
Оставил самый минимум. А остальной функционал разнёс по макросам. Сильно тормозит работу макроса работа с ячейками - надо считывать в массивы, словари, обрабатывать и потом вываливать на лист. А таким количеством формул и функций только одно: в настройках - ручной пересчёт
 
В начале модуля
Код
    Application.Calculation = xlCalculationManual

В конце
Код
    Application.Calculation = xlCalculationAutomatic

Да еще неплохо отменить обновление экрана при счете, и включать его при выводе
Почему это я ничего не могу? Я могу быть плохим примером...  ;)
 
LightZ, К сожалению первые 4 пункта не помогли (подобное я и раньше делал)
Цитата
LightZ пишет:
5. Если не поможет - тогда корректировать/упрощать Ваши массивные UDF'ки
Сейчас как раз занимаюсь определением, на какую функцию идет самая большая трата времени. Ради эксперимента некоторые функцию пропустил через код:
time1 = Timer
……
time2 = Timer
Debug.Print "{ИМЯ ФУНКЦИИ} = ", time2 - time1
Результаты в файле debug.xls (и это только при изменении одной ячейки)

Цитата
Александр Моторин пишет:
А таким количеством формул и функций только одно: в настройках - ручной пересчёт
Автоматический пересчет (на всю книгу) это не совсем хорошо. В процессе заполнения данных желательно видеть изменения расчетных значений (я про лист «Q_heat»). Но Вы натолкнули меня на мысль. Попробовал отключить пересчет формул на конкретных листах (в зависимости от ситуации). Для этого создал макрос и посадил его на кнопку.
В процессе заполнения состава ограждающих конструкций и расчета сопротивления (лист «Опори»), тормоза есть. Но как этот лист заполнен, отключил атомический пересчет на всех листах кроме «Q_heat» (в котором продолжаю дальше работать). Файл ведет себя гораздо «шустрее».
Тормоза остались, но теперь ими можно управлять.
Всем спасибо. Пока это единственный способ, что пришел в голову, может у кого-то появятся еще идеи, прошу поделиться.
Хочется разобраться в природе «подтормаживания». На разных форумах пишут, что на скорость работы файла могут влиять динамически именованные диапазоны. В файле у меня их два. (1 - «Таблиці(А106:А136)», 2 – «Матеріали(А500:А600)» ) .
Так же, по сути, все расчеты, построены на функции «ВПР()».
Догадок много, знать бы, что именно изменить…
 
В остальном присоединяюсь к LightZ, уж очень длинные листы
Почему это я ничего не могу? Я могу быть плохим примером...  ;)
 
Тоже столкнулся с тормозом VBA в виде динамических/именованных диапазонов. Даже правильней написать, объемом данных в умных таблицах, что само по себе является динамическим диапазоном. Если данных в умной таблице нет, то расчет быстрей, данных много - медленней.
Как это обойти?
Спасибо.
Учусь,еще...
 
Цитата
kolyambus55rus написал: Как это обойти?
Удалить данные :)

Ваш вопрос связан с этой темой косвенно. Создайте отдельную тему с названием, отражающим проблему (что-то о динамических диапазонах, умных таблицах)
Страницы: 1
Наверх