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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2012, 10:07   #1
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию Выход из главной процедуры

Здравствуйте, Уважаемые.
Давно уже возникал такой вопрос, но все как-то обходился.
Схематично, есть вот такая конструкция
Код:
Sub Главный()
    Call Макрос_1
    Call Макрос_2
    Call Макрос_3
End Sub
Sub Макрос_1()
    If условие Then Exit Sub
End Sub
Sub Макрос_2()
    If условие Then Exit Sub
End Sub
Sub Макрос_3()
    If условие Then Exit Sub
End Sub
при такой конструкции, только последний Макрос_3 завершает Главный макрос. Exit Sub в 1-м и 2-м макросе, соответственно, завершают свою работу и переходят к выполнению следующего, т.е. все правильно.
А вопрос такой - есть-ли возможность и что нужно прописать вместо Exit Sub чтобы завершался Главный макрос при выполнении условия в любом из макросов. Или данная конструкция вообще ошибочна?
Что уже только не пробовал писать, ничего не получается.
Спасибо.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 26.11.2012, 10:12   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я бы схематично делал так:

Код:
Dim flag As Boolean

Sub Главный()
    Call Макрос_1
    If Not flag Then Call Макрос_2
    If Not flag Then Call Макрос_3
End Sub
Sub Макрос_1()
    If условие Then flag = True: Exit Sub
End Sub
Sub Макрос_2()
    If условие Then flag = True: Exit Sub
End Sub
Sub Макрос_3()
    If условие Exit Sub
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.11.2012, 10:23   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Hugo121, спасибо за столь быстрый ответ.
Сейчас буду пробовать.
===
и, кстати, опять возникла ситуация http://www.programmersforum.ru/showthread.php?t=219011 мой пост #6
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 26.11.2012 в 10:26.
VictorM вне форума Ответить с цитированием
Старый 26.11.2012, 11:15   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Проще:
Код:
Dim условие
Sub Главный()
    Call Макрос_1
    Call Макрос_2
    Call Макрос_3
End Sub
Sub Макрос_1()
    If условие Then Exit Sub
    условие = True
End Sub
Sub Макрос_2()
        If условие Then End
End Sub
Sub Макрос_3()
    If условие Then Exit Sub
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 26.11.2012, 11:38   #5
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

kuklp, да, действительно проще, хотя как он работает, что-то не могу въехать.
буду пробовать сейчас на примерах.
Спасибо.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 26.11.2012, 11:47   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Я всегда так делаю (при помощи функций):

Код:
Sub Главный()
    If Макрос_1 Then Exit Sub
    If Макрос_2 Then Exit Sub
    If Макрос_3 Then Exit Sub
End Sub

Function Макрос_1() As Boolean
    ' ваш код
    ' ...
    Макрос_1 = условие
End Function

Function Макрос_2() As Boolean
    ' ваш код
    ' ...
    Макрос_2 = условие
End Function

Function Макрос_3() As Boolean
    ' ваш код
    ' ...
    Макрос_3 = условие
End Function
EducatedFool вне форума Ответить с цитированием
Старый 26.11.2012, 11:52   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Я всегда так делаю (при помощи функций):
Спасибо!
Сразу столько вариантов.
Большое Спасибо Всем!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив типа integer размером 8х8. Определить сумму главной диагонали. Заменить min элемента массива на сумму главной диагона TimoLLIa Паскаль, Turbo Pascal, PascalABC.NET 1 11.03.2012 19:59
Кнопка Выход(на выход Из программы)С++ Напишите код ProGec4 Общие вопросы C/C++ 3 19.02.2012 15:36
Принудительный выход из процедуры kardinal94 Общие вопросы Delphi 8 12.07.2011 03:55
Выход из процедуры mactepmac Общие вопросы Delphi 1 28.06.2011 06:56
Не работает выход во внешнию среду из процедуры!!! Hacker19_90 Паскаль, Turbo Pascal, PascalABC.NET 1 10.11.2008 19:31