Есть большой массив исходных данных. Программа выполняет просчет, результаты выводит в лист Excel. Если параллельно выводить логи в другой лист, то время исполнения увеличивается на порядок.
Результаты просматриваются после завершения просчета.
Вопрос: можно ли уменьшить время просчета, сохранив при этом логи?
Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист Excel
Модератор: Naeel Maqsudov
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Не видя Вашего кода сложно ответить что-то определенное.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.
Код: Выделить всё
With Application
.ScreenUpdating = False
.Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
Код процедуры.
‘’’’’’’’’’’’’’’’’’’’’’
.Calculation = xlAutomatic
.ScreenUpdating = True
End With
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
Смотря какие логи: я писал в переменную, а потом передавал значение дальше (на запись например)
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Кстати, восмотрите вот это Ведение логов действий программы (модуль класса)
Может что найдете для себя.
Может что найдете для себя.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
VictorM писал(а):Не видя Вашего кода сложно ответить что-то определенное.
По идее все можно сделать. Может быть нужно сам код оптимизировать, а может отключить обновление экрана и автоматический пересчет на время выполнения процедуры и уже после выполнения - включть.Код: Выделить всё
With Application .ScreenUpdating = False .Calculation = xlManual ‘’’’’’’’’’’’’’’’’’’’’’ Код процедуры. ‘’’’’’’’’’’’’’’’’’’’’’ .Calculation = xlAutomatic .ScreenUpdating = True End With
Предложенный VictorM код позволил сократить время просчета в 2 с лишним раза. Это уже хорошо. Другие варианты буду отрабатывать в дальнейшем.
Спасибо всем, кто откликнулся. Удачи.