Страница 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 с лишним раза. Это уже хорошо. Другие варианты буду отрабатывать в дальнейшем.
Спасибо всем, кто откликнулся. Удачи.