Консультация № 178144
01.05.2010, 11:16
0.00 руб.
01.05.2010, 20:05
0 8 1
Уважаемые эксперты подскажите в следующем имеется процедура
Sub А()
……….
End Sub
В её теле есть указание на исполнение функции
В теле функции есть всевозможные проверки
Например, по проверке нужно выйти из Sub А, но написать Exit Sub я не могу, могу лишь Exit Function. Но это немного не то, потому что с функции выхожу в процедуру А, процедура продолжает делать далее по коду, как же указать чтобы выйти из процедуры А???
Спасибо Эндрю

Обсуждение

Неизвестный
01.05.2010, 11:31
общий
это ответ
Здравствуйте, Ципихович Эндрю!
Самый простой способ объявить эту функцию как Boolean, а в А сделать проверку на ее результат и выход при неудовлетворительном результате. Пример:

Sub A()
If Проверка_Условия Then
MsgBox "Принудительный выход из главной процедуры"
Exit Sub
End If
MsgBox "Главная процедура успешно выполнена"
End Sub

Function Проверка_Условия() As Boolean
Проверка_Условия = False
If 1 > 0 Then
Проверка_Условия = True
Exit Function
End If
MsgBox "Функция успешно выполнена"
End Function
5
Неизвестный
01.05.2010, 11:47
общий
Измалков Эдуард Леонидович:
Спасибо за ответ, то ли Вы забиваете, то ли так можно писать
Sub A()
If Проверка_Условия Then
Помоему надо указать If Проверка_Условия = Труе Then
Второе, Вы пишите:
Function Проверка_Условия() As Boolean
Проверка_Условия = False
Строка "Проверка_Условия = False" обязательна????

Неизвестный
01.05.2010, 11:56
общий
Ципихович Эндрю:
Условие после If проверяется на соответствие "True" (в этом случае выполняются команды после оператора Then) либо "False" (в этом случае выполняются команды после оператора Else, либо, при его отсутствии, следующие за условием команды). Т.к. в этом случае Проверка_Условия возвращает логическое значение (True или False), то можно оставить так. Если написать If Проверка_Условия = True, то после выполнения функции будет проверяться следующее выражение: True = True, что также будет верно, но без него короче.
Строка Проверка_Условия = False не обязательна, т.к. VBA присваивает это значение по умолчанию. Если же Вам надо будет, чтобы по умолчанию значение этой функции было True, тогда нужно будет это указать (Проверка_Условия = True)
Неизвестный
01.05.2010, 12:43
общий
Измалков Эдуард Леонидович:
Извините но у меня переменная Проверка_Условия после функции в Зуб А попадает со значением Эмпти
Неизвестный
01.05.2010, 12:54
общий
Ципихович Эндрю:
Всё правильно. Функция выполнилась, условие проверилось, и всё, это значение больше не нужно, поэтому оно сбрасывается, чтобы не занимать память.
давно
Модератор
137394
1850
01.05.2010, 13:02
общий
Ципихович Эндрю:
На мой взгляд, вот стандартное построение программы в Вашем случае (если главное назначение функции - выдать некоторое значение, а не только определить условие дальнейшего исполнения подпрограммы)
Код:
Sub rrr()
' Ваши вычисления в теле субрутины
' Вызовы функции

A1 = Нечто(1, 2, proverka)
If Not proverka Then
' Некие Вычисления при ошибочной функции (если нужно)
Exit Sub
End If

' Продолжение Ваших вычислений в теле субрутины

End Sub
Function Нечто(Arg1, Arg2, iErr)
iErr = True

' Ваши вычисления в теле функции
' Всяческие нужные для Вас проверки
' Например (в любом случае функция должна выдать определённый результат)

iErr = (Arg1 > Arg2)
If iErr Then
Нечто = Arg1 + Arg2 ' Некое выражение при положительной проверке
Else
Нечто = 0 ' Некое выражение при отрицательной проверке
Exit Function
End If

' Подобных кусков где определяется необходимость выхода
' из вызывающей субрутины может быть сколько угодно

End Function
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
01.05.2010, 13:19
общий
Megaloman:
Спасибо за ответ
Честно сказать то что от любого действия есть плюсы и минусы это общеизвестный факт
Но вот они минусы функции наяву
давно
Модератор
137394
1850
01.05.2010, 13:25
общий
Ципихович Эндрю:
Не вижу минусов вообще. Одно из назначений подпрограмм - оформление неких логически обусловленных процедур (не обязательно повторяемых) для читаемости программы
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа