Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
ManUtd
Сообщения: 2
Зарегистрирован: 24 авг 2010, 10:34

Есть большой массив исходных данных. Программа выполняет просчет, результаты выводит в лист Excel. Если параллельно выводить логи в другой лист, то время исполнения увеличивается на порядок.
Результаты просматриваются после завершения просчета.
Вопрос: можно ли уменьшить время просчета, сохранив при этом логи?
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Не видя Вашего кода сложно ответить что-то определенное.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.

Код: Выделить всё

With Application
         .ScreenUpdating = False							
         .Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
Код процедуры.
‘’’’’’’’’’’’’’’’’’’’’’
         .Calculation = xlAutomatic
         .ScreenUpdating = True
    End With
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
RomaS
Сообщения: 57
Зарегистрирован: 05 мар 2008, 09:59

Смотря какие логи: я писал в переменную, а потом передавал значение дальше (на запись например)
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Кстати, восмотрите вот это Ведение логов действий программы (модуль класса)
Может что найдете для себя.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
ManUtd
Сообщения: 2
Зарегистрирован: 24 авг 2010, 10:34

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

Код: Выделить всё

With Application
         .ScreenUpdating = False							
         .Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
Код процедуры.
‘’’’’’’’’’’’’’’’’’’’’’
         .Calculation = xlAutomatic
         .ScreenUpdating = True
    End With

Предложенный VictorM код позволил сократить время просчета в 2 с лишним раза. Это уже хорошо. Другие варианты буду отрабатывать в дальнейшем.
Спасибо всем, кто откликнулся. Удачи.
Ответить