Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

skype: ExcelVBA.ru
По умолчанию

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

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

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

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

skype: ExcelVBA.ru
По умолчанию

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


12:37.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru