|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.01.2012, 01:02 | #1 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Как правильно прервать цикл выполнения
Ситуация: при работе с книгой на экране весит форма вызванная в vbModeless режиме. Одновременно с этим пользователь запускает цикл макросов по формированию документов. Внутри этого цикла есть самостоятельная процедура проверки полноты ввода исходных данных (это может быть 3-6 уровень вложенности). Если они не полны пользователю выводиться сообщение об этом с вопросом о продолжении формирования документа да/нет. Если пользователь отвечает "да", все хорошо, но если пользователь отвечает "нет" происходит выход по команде "End" для того что выйти из цепочки любого уровня вложенности (код привожу). При этом закрывается так же и форма открытая в vbModeless режиме.
Вопрос: как выйти из цепочки вызовов с сохранение рабочей формы в режиме vbModeless? Код:
С уважением, Алексей.
|
05.01.2012, 02:01 | #2 | |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Цитата:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
|
05.01.2012, 02:07 | #3 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
End - это команда останова ВСЕХ макросов.
Выход из процедуры - Exit sub или exit function Надо в коде предусматривать возврат с 6 уровня на первый. Понимаю, что это много кода, - но так уж устроено структурное программирование. Как сделал бы я: 1) код вывода msgbox в первом уровне вложенности (ни в коем случае не глубже второго!) 2) если так уж нужен msgbox на глубоких уровнях - то только END, и потом всё заново 3) переделал бы весь код, оставив максимум 3 уровня вложенности (этого достаточно в абсолютном большинстве случаев) PS: Ничуть не сомневаюсь, что вы отвергнете все 3 моих совета, и опять скажете, что VBA - плохой язык, ибо в REXX это можно было как-то сделать |
05.01.2012, 02:10 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Ещё вариант навскидку:
Код:
Код:
|
05.01.2012, 02:53 | #5 | |||
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Для решения проблемы на уровне кода, потребуется ввести единый стандарт по форме вызова, с обязательным контролем возврата через if. Цитата:
Вложенность контролировать очень сложно, так как почти все системные функции в той или иной степени универсальны, а степень структурирования весьма велика. Их может вызвать сам пользователь (получаем 2-3 уровень), а могут вызвать и процедуру в "фоновом" режиме (а здесь возможны весьма забавные цепочки). Цитата:
У меня иная школа и иной опыт. Не скажу, что это хорошо или плохо. Так есть. Может быть со временем мои взгляды и изменятся или просто стану терпимее (читай старее). :))
С уважением, Алексей.
|
|||
05.01.2012, 02:59 | #6 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Только использования подобного, мне бы очень хотелось избежать. Это не решение проблемы, а обход её. Если рассматривать проблему как ошибку проектирования, то она все равно встанет боком (ещё большим) в другом месте. Лучше решить её сейчас.
С уважением, Алексей.
|
|
05.01.2012, 10:37 | #7 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Я прикидываю как создать систему возврата ошибки без преобразования процедур в функции.
С уважением, Алексей.
|
|
05.01.2012, 11:23 | #8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Глобальная/публичная переменная?
webmoney: E265281470651 Z422237915069 R418926282008
|
05.01.2012, 11:25 | #9 |
Участник клуба
Регистрация: 02.05.2010
Сообщений: 1,390
|
Кто мешает присвоить значение ошибки глобальной переменной?
Игорь опередил:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728 |
05.01.2012, 11:52 | #10 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Ну что же, на этом варианте и остановимся. :)
С уважением, Алексей.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно задать цикл? | BingoBongo | Общие вопросы Delphi | 12 | 07.05.2011 09:09 |
Как прервать цикл, когда нажата кнопка какая-нибудь? | Karyuudo | Общие вопросы Delphi | 1 | 12.04.2010 18:52 |
не могу разобраться как правильно оформить цикл | NICmito | Общие вопросы C/C++ | 6 | 17.12.2009 18:01 |
Как прервать внешний цикл? | AndreyF | Общие вопросы Delphi | 15 | 15.06.2009 17:46 |
Как правильно построить цикл для выборки? | Tanuska___:) | БД в Delphi | 1 | 12.01.2009 14:50 |