Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 01.12.2008, 07:56   #11
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Заменил, все работает. Но есть одно большое "НО". Ввиду того что лист "итог" содержит более 3000 строк с данными и функциями, макрос отрабатывается более 10 минут. На не больших примерах все происходит гораздо быстрее.
Думайте глобально - действуйте локально!
Iskin вне форума
Старый 01.12.2008, 14:23   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 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

Сам цикл (пустой) отрабатывает моментально:
Цитата:
For i = LBound(arr) To UBound(arr)
If arr(i, 1) <> Nomer Then
' здесь пишем код для скрытия строки
End If
Next
А вот время работы кода (для разных способов скрытия строк):

.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 секунду
(формируем в теле цикла адрес диапазона для скрытия)



Для запуска разных вариантов измените в обработчике
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Address = [g1].Address Then Cancel = True: CopySheet2
End Sub
команду CopySheet2 на CopySheet1 или CopySheet3


Теперь значения, которые Вам нужно изменять, вынесены в начало модуля:

Const ЯчейкаСНомером = "G1"
Const СтолбецПоКоторомуОпределяемПоследню юЗаполненнуюСтроку = "A"
Const СтолбецСНомеромИзделия = "E"


При выполнении макроса смотрите на строку состояния Excel - туда выводится номер обрабатываемой строки.

Если надо, чтобы при перезаписи существующего файла выдавался запрос, уберите строку Application.DisplayAlerts = False
Вложения
Тип файла: rar pack ! 4_1.rar (195.7 Кб, 14 просмотров)
EducatedFool вне форума
Старый 01.12.2008, 15:13   #13
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

оказалось, что дело в Office 2007 или Висте... попробывал вариант # 10 на другом компе с офисом 2003 там все быстро отработало.
Думайте глобально - действуйте локально!
Iskin вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести в новую книгу отмеченые строки 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