|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.05.2009, 15:35 | #1 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
Уведомление об обработке массива
Подскажите, пожалуйста, как сделать так, чтобы во время обработки массива (длится минут 10-15) на активном листе появлялась форма, на которой была бы надпись "Идет обработка массива...", а также была кнопка "Отмена", нажав которую, пользователь бы отменил остановил выполнение обработки массива. После окончания обработки форма бы сама исчезала. Во время обработки обновление экрана отменено.
Пример формы - в прикрепленном файле в мастере VB. Заранее спасибо за помощь! |
27.05.2009, 15:48 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
В прикреплённом файле нет ни одной строки кода.
Или Вы предлагаете нам написать код обработки массива, чтобы его можно было останавливать кнопкой Отмена? Если у Вас выполнение кода Цитата:
Прикрепите файл с данными и кодом - посмотрим, что можно сделать. Все Ваши массивы вполне реально обработать за 1-2 секунды (в крайнем случае 4 секунды) |
|
27.05.2009, 21:29 | #3 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
EducatedFool, спасибо за ответ, мне казалось, что код неважен, для меня самое важное понять, как сделать вывод формы и возможность досрочного завершения (отмены) работы макроса.
По сути макроса - от рассчитан на обработку массивов порядка 30 листов с таблицами, каждая из которых по 200 столбцов и порядка 10 000 строк, а сам файл весит порядка 15 Мбайт. Поэтому по моим рассчетам время его обработки - порядка 10-15 минут, в уже оптимизированном виде. Но это так, к слову. Я прикрепил пример массива и пример кода в файле - он небольшой, из одного листа и обрабатывается быстро (там всего 100 строк и несколько столбцов), но мне важно разобраться именно с формой уведомления... Там же есть и Userform уведомления. PS. Кнопка "отмена" должна просто останавливать обработку, а не отменять уже обработанное. То есть это аналог меню, которое выдает макрос при обнаружении ошибки... |
28.05.2009, 17:02 | #4 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Посмотрел я Ваш макрос... Да, такой код будет выполняться не менее 10 минут
(хорошо ещё, если за это время он успеет обработать все листы) 680 строк кода... Вы ни разу не замечали, что весь макрос состоит из одних и тех же строк кода? Даже если просто вынести повторяющийся код в отдельную функцию, макрос сократится до 150 строк. Если оптимизировать макрос, в нём останется около 30 строк кода, и работать он будет в 100 раз быстрее. (на обработку всех листов файла уйдёт не больше 10 секунд) Цитата:
Самое важное - это понять, что присутствие в коде повторяющихся строк - признак его неэффективности. У нас на форуме есть один человек, который пишет макросы в Вашем стиле, - а потом месяцами их переписывает, не понимая, что его подход к решению задачи изначально обречён на провал. Делая форму с уведомлением, Вы пойдёте по тому же пути... Оптимизируйте код (сначала считываем весь используемый диапазон листа в массив, потом макросом обрабатываем значения массива, после чего переносим массив обратно на лист), и Вам больше не придётся уведомлять пользователя о необходимости подождать... |
|
28.05.2009, 17:33 | #5 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
EducatedFool я согласен с вами, но знал бы как, оптимизировал бы больше. И был бы признателен, если бы помогли... (ибо не раз выручали ранее, за что отдельное спасибо )
И все-таки, вопрос о создании уведомления об обработке остался без ответа... Помогите с ним, пожалуйста! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрсы по обработке сообщений | 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 |