Лекция № 21. Создание и использование процедур

К настоящему времени Вы заработали баллов: 0 из 0 возможных.

Страница 4. Использование функций-процедур и подпрограмм в VBA

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

Если нужно использовать именованные аргументы функциях-процедурах, надо использовать имена из списка аргументов в объявлении функции-процедуры. Например, чтобы использовать именованный аргумент в вызове функции LenTrim, надо использовать оператор, подобный следующему:

 

AnyStr = LenTrim(tStr:=MyString)

 

Для вызова процедуры Sub используется следующие способы:

 

Имя_Процедуры Список_Фактических_Параметров

Call Имя_Процедуры (Список_Фактических_Параметров)

 

Пример 3:

Dim с As Double 'с - глобальный параметр

Function f(ByVal x As Integer) As Integer
f = x ^ 2
End Function

Sub Assistant(ByVal a As Integer, ByVal b As Integer)
'процедура, находящая сумму двух чисел и выводящая результат в диалоговом окне
c = а + b
MsgBox CStr(c)
End Sub

Sub main()

'процедура, находящая сумму двух чисел и выводящая результат в диалоговом окне
Dim x As Double, у As Double

'вызов процедуры с фактическими параметрами
Call Assistant(1, 3)

'первоначальное присвоение переменным значений, с последующим вызовом процедуры
x = 1: у = 1
Call Assistant(x, f(x))
Assistant x, у + 2

'использование функции как фактического параметра
х = 1: у = 3
Assistant f(x), у

' вызов процедуры с указанием фактических параметров по имени
Assistant a:=l, b:=3

End Sub

Программа может содержать любое число подпрограмм, но она должна иметь только одну основную часть, которая управляет выполнением и вызовом подпрограмм. Одним из хороших принципов программирования является принцип модульности. Процедура не должна содержать бесконечно длинный код, части которого выполняют совершенно не связанные между собой задачи. Следуtn помещать в каждую процедуру небольшой и функционально законченный код, который легко читать и сопровождать. Например, хорошо понимается код со следующей структурой:

 

Sub ГлавнаяПроцедура()

'Вызов процедуры Процедура1

Call Процедура1

'Вызов процедуры Процедура2

Call Процедура2

'Вызов процедуры Процедура3

Call Процедура3

End Sub

 

Sub Процедура1()

' Код процедуры

End Sub

 

Sub Процедура2()

'Код процедуры

End Sub

 

Sub Процедура3()

'Код процедуры

End Sub

 

Можно также встретить и следующий код:

Sub ГлавнаяПроцедура()

'Код процедуры

'Вызов процедуры Процедура1

Call Процедура1

End Sub

 

Sub  Процедура1()

'Код процедуры

'Вызов процедуры Процедура2

Call Процедура2

End Sub

 

Sub Процедура2()

'Код процедуры

'Вызов процедуры Процедура3

Call Процедура3

End Sub

 

Sub Процедура3()

'Код процедуры

End Sub

 

В этих фрагментах кода процедуры не воз­вращают никаких результатов свой работы. Это может быть только в случае, когда эти процедуры по очереди обрабатывают какие-то общие данные, выпол­няя над ними определенные действия. Результатами этих действий могут быть либо сами преобразованные данные, либо новые (и тоже общие) данные.

Возможна ситуация, когда обработка данных одной процедурой зависит от результатов обработки этих данных другой процедурой, выполняе­мой раньше. Вполне возможно, что по каким-то причинам (пользователь не­правильно ввел данные или вообще отказался от ввода, неправильно ввел числовые и другие данные) одна из процедур не подготовила данные для обработки следующей процедурой. В этом случае весь процесс обработки дан­ных следует прекратить и в дальнейшем никаких процедур не вызывать. Т.е. просто закончить работу всей программы. При этом даже необязательно воз­вращаться в вызывающую процедуру, особенно если предусмотреть перед каждым выходом из программы вывод окна с сообщением о том, почему и где было прервано выполнение кода.

Для полного завершения выполнения программы с помощью VBA исполь­зуйте ключевое слово End одно в отдельной строке:

 

End

 

При выполнении этого оператора VBA прекращает все выполнения операторов процедуры и функции. Любые имеющиеся переменные перестают существовать и их значения теряются.

 

Вы прошли 69% лекции
69%