Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Непонятное замедление работы макроса. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Непонятное замедление работы макроса.
Неопытный Дата: Понедельник, 18.11.2013, 15:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
добрый день!
В заключительной части макроса происходит вставка пустых строк на листе в зависимости от результатов на листе, полученных в начальной части макроса.Значения переменных из начальной части макроса не используются в заключительной части, только значения полученные в ячейках.
В результате вставляется около 500 строк на 700 строк текста.Время работы заключительной части макроса около 25 сек. Если сделать останов макроса перед заключительной частью и закрыть книгу с сохранением и снова открыть и запустить макрос из точки останова,то заключительная часть отрабатывает за 0,4 сек., т.е. ускорение примерно в 60 раз. Пробовал очищать буфер перед заключительной частью- не помогает. Формул на листе нет.
Какие могут быть причины замедления?
 
Ответить
Сообщениедобрый день!
В заключительной части макроса происходит вставка пустых строк на листе в зависимости от результатов на листе, полученных в начальной части макроса.Значения переменных из начальной части макроса не используются в заключительной части, только значения полученные в ячейках.
В результате вставляется около 500 строк на 700 строк текста.Время работы заключительной части макроса около 25 сек. Если сделать останов макроса перед заключительной частью и закрыть книгу с сохранением и снова открыть и запустить макрос из точки останова,то заключительная часть отрабатывает за 0,4 сек., т.е. ускорение примерно в 60 раз. Пробовал очищать буфер перед заключительной частью- не помогает. Формул на листе нет.
Какие могут быть причины замедления?

Автор - Неопытный
Дата добавления - 18.11.2013 в 15:04
_Boroda_ Дата: Понедельник, 18.11.2013, 15:43 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16744
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд. Я думаю, что достаточно будет просто сохранить книгу перед вставкой строк.
Или добавьте в код перед вставкой такую строку
[vba]
Код
ActiveSheet.UsedRange
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПосле того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд. Я думаю, что достаточно будет просто сохранить книгу перед вставкой строк.
Или добавьте в код перед вставкой такую строку
[vba]
Код
ActiveSheet.UsedRange
[/vba]

Автор - _Boroda_
Дата добавления - 18.11.2013 в 15:43
Неопытный Дата: Понедельник, 18.11.2013, 16:27 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Спасибо Вам за интересную подсказку.Вставил ActiveSheet.UsedRange перед началом цикла Do while,который определяет необходимость вставки строк и вставляет их. ПОМОГЛО!
Только не понял почему.
Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.
 
Ответить
СообщениеСпасибо Вам за интересную подсказку.Вставил ActiveSheet.UsedRange перед началом цикла Do while,который определяет необходимость вставки строк и вставляет их. ПОМОГЛО!
Только не понял почему.
Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.

Автор - Неопытный
Дата добавления - 18.11.2013 в 16:27
AndreTM Дата: Понедельник, 18.11.2013, 16:40 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Application.ScreenUpdating ?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеApplication.ScreenUpdating ?

Автор - AndreTM
Дата добавления - 18.11.2013 в 16:40
_Boroda_ Дата: Понедельник, 18.11.2013, 16:43 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16744
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Цитата Неопытный, 18.11.2013 в 16:27, в сообщении № 3
Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.

Цикл тут вообще ни при чем. Еще раз
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд.

Все это нужно сделать ДО ЗАПУСКА ЦИКЛА.
Предположу, что первый Контрл Енд даст Вам ячейку с намного большим номером строки, чем остальные два. Т.е., Вы постирали кучу строк (или значений в них), там уже ничего не осталось, а "ручки-то помнят".
А строкой кода, приведенной выше, вы приводите UsedRange в тот вид, который Вы видите на листе в настоящий момент.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Цитата Неопытный, 18.11.2013 в 16:27, в сообщении № 3
Перед началом цикла была выделена ячейка А1. После окончания цикла также остается выделенной эта ячейка.

Цикл тут вообще ни при чем. Еще раз
После того, как сделали останов, нажмите Контрл Енд и посмотрите номер строки (до кучи и столбца тоже) у выделившейся ячейки. Перейдите в А1, сохраните файл и проделайте ту же операцию. Перейдите в А1, закройте-откройте файл и опять Контрл Енд.

Все это нужно сделать ДО ЗАПУСКА ЦИКЛА.
Предположу, что первый Контрл Енд даст Вам ячейку с намного большим номером строки, чем остальные два. Т.е., Вы постирали кучу строк (или значений в них), там уже ничего не осталось, а "ручки-то помнят".
А строкой кода, приведенной выше, вы приводите UsedRange в тот вид, который Вы видите на листе в настоящий момент.

Автор - _Boroda_
Дата добавления - 18.11.2013 в 16:43
Неопытный Дата: Понедельник, 18.11.2013, 17:04 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Boroda! Спасибо! Стало понятно. Пересохранение или сохранение файла уменьшило число строк в памяти с 65536 до 946.
Примерно в такое же количество раз уменьшалось время выполнения макроса.
 
Ответить
СообщениеBoroda! Спасибо! Стало понятно. Пересохранение или сохранение файла уменьшило число строк в памяти с 65536 до 946.
Примерно в такое же количество раз уменьшалось время выполнения макроса.

Автор - Неопытный
Дата добавления - 18.11.2013 в 17:04
Неопытный Дата: Понедельник, 18.11.2013, 17:10 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Application.ScreenUpdating ?

Обновление экрана было отключено
 
Ответить
Сообщение
Application.ScreenUpdating ?

Обновление экрана было отключено

Автор - Неопытный
Дата добавления - 18.11.2013 в 17:10
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!