Страница 1 из 1
Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист Excel
Добавлено: 24 авг 2010, 10:57
ManUtd
Есть большой массив исходных данных. Программа выполняет просчет, результаты выводит в лист Excel. Если параллельно выводить логи в другой лист, то время исполнения увеличивается на порядок.
Результаты просматриваются после завершения просчета.
Вопрос: можно ли уменьшить время просчета, сохранив при этом логи?
Re: Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист E
Добавлено: 24 авг 2010, 11:34
VictorM
Не видя Вашего кода сложно ответить что-то определенное.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.
Код: Выделить всё
With Application
.ScreenUpdating = False
.Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
Код процедуры.
‘’’’’’’’’’’’’’’’’’’’’’
.Calculation = xlAutomatic
.ScreenUpdating = True
End With
Re: Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист E
Добавлено: 24 авг 2010, 11:44
RomaS
Смотря какие логи: я писал в переменную, а потом передавал значение дальше (на запись например)
Re: Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист E
Добавлено: 24 авг 2010, 13:03
VictorM
Кстати, восмотрите вот это
Ведение логов действий программы (модуль класса)
Может что найдете для себя.
Re: Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист E
Добавлено: 24 авг 2010, 15:01
ManUtd
VictorM писал(а):Не видя Вашего кода сложно ответить что-то определенное.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.
Код: Выделить всё
With Application
.ScreenUpdating = False
.Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
Код процедуры.
‘’’’’’’’’’’’’’’’’’’’’’
.Calculation = xlAutomatic
.ScreenUpdating = True
End With
Предложенный VictorM код позволил сократить время просчета в 2 с лишним раза. Это уже хорошо. Другие варианты буду отрабатывать в дальнейшем.
Спасибо всем, кто откликнулся. Удачи.