|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
01.12.2008, 07:56 | #11 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 307
|
Заменил, все работает. Но есть одно большое "НО". Ввиду того что лист "итог" содержит более 3000 строк с данными и функциями, макрос отрабатывается более 10 минут. На не больших примерах все происходит гораздо быстрее.
Думайте глобально - действуйте локально!
|
01.12.2008, 14:23 | #12 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Странно...
На моём компьютере обработка происходит гораздо быстрее (Celeron 1300, RAM 256 Mb). Да и компьютер у Вас, наверняка, гораздо мощнее... Изначально я не оптимизировал код - так как не знал, что строк будет так много. Вот результаты работы прежнего кода для 10 000 строк - всего 10 секунд =================================== ==== 01.12.2008 14:36:28 start processing file 01.12.2008 14:36:29 BeforeHidingRows Rows.Count = 10295 01.12.2008 14:36:39 AfterHidingRows - saving file 01.12.2008 14:36:40 file already saved 01.12.2008 14:36:40 file closed Пытался оптимизировать код, но результата лучше 3 секунд добиться не удалось... (в варианте CopySheet2, который сейчас включен по умолчанию) =================================== ==== 01.12.2008 16:14:30 start processing file 01.12.2008 16:14:30 BeforeHidingRows Rows.Count = 10295 01.12.2008 16:14:32 Rows already hidden - saving file 01.12.2008 16:14:33 file already saved 01.12.2008 16:14:33 file closed Сам цикл (пустой) отрабатывает моментально: Цитата:
.Rows(i + 2).RowHeight = 0 - за 9 секунд .Rows(i + 2).Hidden = True - за 6 секунд Set rowsArr = Union(rowsArr, .Rows(i + 2)) - около 95 секунд (сначала формируем диапазон строк для скрытия, а после цикла скрываем их) r = A$ & CStr(i + 2): addr = addr & b$ & r & c$ & r - за 1 секунду (формируем в теле цикла адрес диапазона для скрытия) Для запуска разных вариантов измените в обработчике Код:
Теперь значения, которые Вам нужно изменять, вынесены в начало модуля: Const ЯчейкаСНомером = "G1" Const СтолбецПоКоторомуОпределяемПоследню юЗаполненнуюСтроку = "A" Const СтолбецСНомеромИзделия = "E" При выполнении макроса смотрите на строку состояния Excel - туда выводится номер обрабатываемой строки. Если надо, чтобы при перезаписи существующего файла выдавался запрос, уберите строку Application.DisplayAlerts = False |
|
01.12.2008, 15:13 | #13 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 307
|
оказалось, что дело в Office 2007 или Висте... попробывал вариант # 10 на другом компе с офисом 2003 там все быстро отработало.
Думайте глобально - действуйте локально!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перенести в новую книгу отмеченые строки | Rom1k06 | Microsoft Office Excel | 11 | 31.07.2008 12:22 |
Помогите плз. Необходимо взять данные из файлов по критерию. | Rom1k06 | Microsoft Office Excel | 5 | 30.07.2008 12:57 |
Excel-перенос иформации с одного листа в другой согласно условия | ЛюдмилаЗ | Microsoft Office Excel | 2 | 28.05.2008 12:38 |
Поиск в *.txt по критерию | fudzy79 | Помощь студентам | 5 | 04.02.2008 09:14 |
макрос VBA EXCEL - деление ряда чисел по заданному критерию | Обыватель | Microsoft Office Excel | 10 | 30.01.2008 14:36 |