Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Настройка Excel


Автор: Тиль 29.5.2008, 13:08
Есть большой файл.около 100 Мб. Много данных и макросов. При срабатиывании макросов файл начинает висеть по несколько минут. Можно как нибудь ускорить процесс выполнения?В процессе происходит много вычислений. Вопрос очень важный. Компьютер нормальный по параметрам

Автор: Naghual 29.5.2008, 13:45
Цитата(Тиль @  29.5.2008,  13:08 Найти цитируемый пост)
Много данных и макросов.


Цитата(Тиль @  29.5.2008,  13:08 Найти цитируемый пост)
В процессе происходит много вычислений.



Только оптимизацией Логики.

Автор: LOPUH 29.5.2008, 14:16
Цитата(Naghual @  29.5.2008,  13:45 Найти цитируемый пост)
Только оптимизацией Логики. 

Согласен. Если интересует оптимизация кода зайдите http://forum.sources.ru/index.php?showforum=184. 

Автор: RockClimber 30.5.2008, 16:40
Цитата(Тиль @  29.5.2008,  13:08 Найти цитируемый пост)
Можно как нибудь ускорить процесс выполнения?

Возможно, стоит отменить автоматическое выполнение некоторых макросов (если такие есть) и выполнять их только по запросу пользователя? Это тоже оптимизация в каком-то роде...

Автор: FINANSIST 3.6.2008, 08:39
Итак , господа, причины может быть 5:
Причина первая.
В файле помимо большого количества макросов есть большое количество формул.
Решение.
При запуске макросов прописываем в коде ручной пересчёт ячеек , при завершениии - соответственно включаем автоматический пересчёт.
Причина вторая.
В файле присутствуют макросы, перехватывающие определённые события. Например событие листов Selection_Change.
Пояснение причины: 
При работе модульного макроса с ячейками после каждой такой операции срабатывает механизм перехвата события макросами листа, они (макросы листа) активизируются  не выполняя своих полезных функций, но занимают системную память и время.
Решение
Прогони пошагово модульный марос через F8, и посмотри , будешь ли ты вылетать в марос листа. Если такое случится хотя бы раз - прописываешь в начале каждого модульного макроса код :
Код

application.enableevents = false
--------------------------------------
application.enableevents = true

Причина третья
Пользователь видит действия, мароса
Пояснение причины
Отображение действий пользователю занимает достаточно много системных ресурсов
Решение
Код

application.screenupdating = false
----------------------------------------
application.screenupdating = true

Причина четвёртая
Необъявлены явно все типы переменных в коде
решение
option explicit
dim ........... as ............
И наконец причина пятая
Код действительно неоптимизирован, то есть выполняет кучу лишних действий
Пояснение причины
Если пользователь был не очень опытный, он мог большинство маросов просто тупо сгенерировать (записать) а не сформировать код вручную. При этом код становится просто избыточным  ( в разы раздутым)
Решение
анализируй пошагово действия, смотри , что происходит и действительно ли данное действие необходимо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)