добрый день! В заключительной части макроса происходит вставка пустых строк на листе в зависимости от результатов на листе, полученных в начальной части макроса.Значения переменных из начальной части макроса не используются в заключительной части, только значения полученные в ячейках. В результате вставляется около 500 строк на 700 строк текста.Время работы заключительной части макроса около 25 сек. Если сделать останов макроса перед заключительной частью и закрыть книгу с сохранением и снова открыть и запустить макрос из точки останова,то заключительная часть отрабатывает за 0,4 сек., т.е. ускорение примерно в 60 раз. Пробовал очищать буфер перед заключительной частью- не помогает. Формул на листе нет. Какие могут быть причины замедления?
добрый день! В заключительной части макроса происходит вставка пустых строк на листе в зависимости от результатов на листе, полученных в начальной части макроса.Значения переменных из начальной части макроса не используются в заключительной части, только значения полученные в ячейках. В результате вставляется около 500 строк на 700 строк текста.Время работы заключительной части макроса около 25 сек. Если сделать останов макроса перед заключительной частью и закрыть книгу с сохранением и снова открыть и запустить макрос из точки останова,то заключительная часть отрабатывает за 0,4 сек., т.е. ускорение примерно в 60 раз. Пробовал очищать буфер перед заключительной частью- не помогает. Формул на листе нет. Какие могут быть причины замедления?Неопытный
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд. Я думаю, что достаточно будет просто сохранить книгу перед вставкой строк. Или добавьте в код перед вставкой такую строку [vba]
Код
ActiveSheet.UsedRange
[/vba]
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд. Я думаю, что достаточно будет просто сохранить книгу перед вставкой строк. Или добавьте в код перед вставкой такую строку [vba]
Спасибо Вам за интересную подсказку.Вставил ActiveSheet.UsedRange перед началом цикла Do while,который определяет необходимость вставки строк и вставляет их. ПОМОГЛО! Только не понял почему. Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.
Спасибо Вам за интересную подсказку.Вставил ActiveSheet.UsedRange перед началом цикла Do while,который определяет необходимость вставки строк и вставляет их. ПОМОГЛО! Только не понял почему. Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.Неопытный
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд.
Все это нужно сделать ДО ЗАПУСКА ЦИКЛА. Предположу, что первый Контрл Енд даст Вам ячейку с намного большим номером строки, чем остальные два. Т.е., Вы постирали кучу строк (или значений в них), там уже ничего не осталось, а "ручки-то помнят". А строкой кода, приведенной выше, вы приводите UsedRange в тот вид, который Вы видите на листе в настоящий момент.
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд.
Все это нужно сделать ДО ЗАПУСКА ЦИКЛА. Предположу, что первый Контрл Енд даст Вам ячейку с намного большим номером строки, чем остальные два. Т.е., Вы постирали кучу строк (или значений в них), там уже ничего не осталось, а "ручки-то помнят". А строкой кода, приведенной выше, вы приводите UsedRange в тот вид, который Вы видите на листе в настоящий момент._Boroda_
Boroda! Спасибо! Стало понятно. Пересохранение или сохранение файла уменьшило число строк в памяти с 65536 до 946. Примерно в такое же количество раз уменьшалось время выполнения макроса.
Boroda! Спасибо! Стало понятно. Пересохранение или сохранение файла уменьшило число строк в памяти с 65536 до 946. Примерно в такое же количество раз уменьшалось время выполнения макроса.Неопытный