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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 15:35   #1
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Уведомление об обработке массива

Подскажите, пожалуйста, как сделать так, чтобы во время обработки массива (длится минут 10-15) на активном листе появлялась форма, на которой была бы надпись "Идет обработка массива...", а также была кнопка "Отмена", нажав которую, пользователь бы отменил остановил выполнение обработки массива. После окончания обработки форма бы сама исчезала. Во время обработки обновление экрана отменено.

Пример формы - в прикрепленном файле в мастере VB.
Заранее спасибо за помощь!
Вложения
Тип файла: rar Обработка массива.rar (7.1 Кб, 11 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 27.05.2009, 15:48   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В прикреплённом файле нет ни одной строки кода.
Или Вы предлагаете нам написать код обработки массива, чтобы его можно было останавливать кнопкой Отмена?

Если у Вас выполнение кода
Цитата:
длится минут 10-15
это повод не отображать форму с уведомлением о задержке, а оптимизировать код.

Прикрепите файл с данными и кодом - посмотрим, что можно сделать.
Все Ваши массивы вполне реально обработать за 1-2 секунды (в крайнем случае 4 секунды)
EducatedFool вне форума Ответить с цитированием
Старый 27.05.2009, 21:29   #3
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

EducatedFool, спасибо за ответ, мне казалось, что код неважен, для меня самое важное понять, как сделать вывод формы и возможность досрочного завершения (отмены) работы макроса.
По сути макроса - от рассчитан на обработку массивов порядка 30 листов с таблицами, каждая из которых по 200 столбцов и порядка 10 000 строк, а сам файл весит порядка 15 Мбайт. Поэтому по моим рассчетам время его обработки - порядка 10-15 минут, в уже оптимизированном виде. Но это так, к слову.
Я прикрепил пример массива и пример кода в файле - он небольшой, из одного листа и обрабатывается быстро (там всего 100 строк и несколько столбцов), но мне важно разобраться именно с формой уведомления... Там же есть и Userform уведомления.
PS. Кнопка "отмена" должна просто останавливать обработку, а не отменять уже обработанное. То есть это аналог меню, которое выдает макрос при обнаружении ошибки...
Вложения
Тип файла: rar Массив 2008.rar (23.6 Кб, 10 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 28.05.2009, 17:02   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Посмотрел я Ваш макрос... Да, такой код будет выполняться не менее 10 минут
(хорошо ещё, если за это время он успеет обработать все листы)

680 строк кода...
Вы ни разу не замечали, что весь макрос состоит из одних и тех же строк кода?
Даже если просто вынести повторяющийся код в отдельную функцию, макрос сократится до 150 строк.
Если оптимизировать макрос, в нём останется около 30 строк кода, и работать он будет в 100 раз быстрее. (на обработку всех листов файла уйдёт не больше 10 секунд)

Цитата:
код неважен, для меня самое важное понять, как сделать вывод формы и возможность досрочного завершения (отмены) работы макроса.
Код как раз важен. Именно он определяет эффективность и скорость работы Вашей программы.

Самое важное - это понять, что присутствие в коде повторяющихся строк - признак его неэффективности.

У нас на форуме есть один человек, который пишет макросы в Вашем стиле, - а потом месяцами их переписывает, не понимая, что его подход к решению задачи изначально обречён на провал.
Делая форму с уведомлением, Вы пойдёте по тому же пути...

Оптимизируйте код (сначала считываем весь используемый диапазон листа в массив, потом макросом обрабатываем значения массива, после чего переносим массив обратно на лист), и Вам больше не придётся уведомлять пользователя о необходимости подождать...
EducatedFool вне форума Ответить с цитированием
Старый 28.05.2009, 17:33   #5
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

EducatedFool я согласен с вами, но знал бы как, оптимизировал бы больше. И был бы признателен, если бы помогли... (ибо не раз выручали ранее, за что отдельное спасибо )
И все-таки, вопрос о создании уведомления об обработке остался без ответа... Помогите с ним, пожалуйста!
Иванов_ДМ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрсы по обработке сообщений chandrasecar Win Api 1 12.10.2008 09:37
Уведомление при запуске нового процесса в Windows BATMEN Win Api 6 17.01.2008 14:28
программа на си по обработке строки riptror Общие вопросы C/C++ 1 20.11.2007 20:54
Процедуры по обработке изображений. AidarBik Общие вопросы Delphi 7 08.10.2007 12:50