VBA: типы процедур и функций
план-конспект занятия на тему
VBA процедуры типа Sub – подпрограммы
Скачать:
Вложение | Размер |
---|---|
tipy_vba_protsedur_lektsiya_praktika.doc | 146.5 КБ |
Предварительный просмотр:
Тема урока: типы VBA процедур и функций
Подпрограммы – блоки кода заключенные в конструкцию Sub …. End Sub. Сама по себе подпрограмма не возвращает никакого значения, а просто выполняет прописанные в ней команды.
Функции – также блок кода, но прописанный в конструкцию Function … End Function. После выполнения функции возвращается определенное значение, доступ к которому можно получить через имя VBA функции.
Помимо этого, стоит упомянуть про обработку событий (нажатие кнопки клавиатуры или перемещение мыши) и доступ к объектам, но это отдельная тема.
VBA процедуры типа Sub – подпрограммы
После того как вы добавили в проект новый модуль, для объявления процедуры VBA нужно ее заключить в специальную конструкцию:
Sub ИмяПодпрограмм([аргументы])
Операторы
[Exit Sub]
операторы
End Sub
После ключевого слова Sub следует имя подпрограммы, в круглых скобках можно указывать или не указывать аргументы. Аргументы – это переменные (параметры), значение которых может обрабатываться, аргументы разделяются запятыми. Конструкция Exit Sub также не является обязательной, она говорит том, что нужно произвести выход из подпрограммы и продолжить выполнение кода, следующего после выражения End Sub.
Вызов VBA процедуры осуществляется с помощью ключевого слова call, например, Call MySub.
Давайте напишем простой пример: добавьте в проект новую форму и новый модуль. На поверхность формы добавьте два текстовых поля (TextBox), одну метку (Label) и одну кнопку (CommandButton). Создайте связь между формой и модулем, прописав в редакторе кода для модуля:
Sub SubModule()
SubForm.Show
End Sub
Я назвал форму SubForm, а модуль – SubModule, за имя отвечает свойство Name.
Теперь в редакторе кода для формы пропишите:
'************************************
' Вычисление гипотенузы
'************************************
' процедура VBA принимает два параметра
Sub Hipotenuze(a, b)
Dim c
' Проверка, если значения равны нулю
If TextBox1.Text = 0 Or TextBox2.Text = 0 Then
a = 1: b = 1
End If
' вычисление гипотенузы
c = Sqr(a ^ 2 + b ^ 2)
Label1.Caption = "Гипотенуза: " & c
End Sub
' Обработка нажатия на кнопку
Private Sub CommandButton1_Click()
Dim Ta, Tb
Ta = TextBox1.Text
Tb = TextBox2.Text
' vba вызов процедуры Hipotenuze
Call Hipotenuze(Ta, Tb)
End Sub
' Настройка свойств при запуске формы
Private Sub UserForm_Initialize()
Label1.Caption = ""
Label1.FontSize = 15
Label1.ForeColor = vbBlue
CommandButton1.Caption = "Найти"
TextBox1.Text = 5
TextBox2.Text = 5
End Sub
Тут все предельно просто, вначале мы объявили процедуру Hipotenuze, которой будут передаваться два аргумента, далее происходит проверка на нулевые значения. Вызов происходит при нажатии на кнопку, находящуюся на форме, параметрами будут значения, хранящиеся в текстовых полях TextBox1 и TextBox2. Результат отображается в метке Label1.
Вызов процедуры VBA может осуществляться и без использования ключевого слова Call, в таком случае, параметры не надо заключать в круглые скобки. Так же, при определении аргументов можно явно указать тип данных, например:
Sub MySub (a As Integer, b As String) … End Sub
Дополнительные особенности:
Static – данное ключевое слово, прописанное перед ключевым словом Sub позволяет сохранять в памяти значения всех переменных после выполнения процедуры. Его мы рассматривали в с статье – переменные VBA.
ParamArray – данное ключевое слово позволяет передавать процедуре переменное количество параметров, оно может использоваться только для последнего элемента в списке аргументов.
ParamArray нельзя использовать вместе со словами ByRef, ByVal или Optional, например:
'************************************
' Передача параметров
'************************************
' процедура VBA принимает два параметра
Sub MyArguments(a As Integer, ParamArray b())
Dim elem, s As String
Label1.Caption = a
For Each elem In b
s = s & elem & " "
Next
Label2.Caption = s
End Sub
' Обработка нажатия на кнопку
Private Sub CommandButton1_Click()
MyArguments 1, 5, 6, 100, "строка"
End Sub
' Настройка свойств при запуске формы
Private Sub UserForm_Initialize()
Label1.Caption = ""
Label1.FontSize = 15
Label1.ForeColor = vbBlue
Label2.Caption = ""
Label2.FontSize = 15
Label2.ForeColor = vbRed
CommandButton1.Caption = "Вывести"
End Sub
Как видим, мы фактически с помощью ParamArray показываем, что передаем массив, для его обработки мы использовали оператор For …. Each. Тут мы передали при вызове VBA процедуры пять параметров, при этом, первый будет храниться в аргументе a, а остальные в аргументе b, который обрабатывается как массив.
Optional – позволяет указать, что аргумент не является обязательным и одновременно задать значение по умолчанию.
Например:
'************************************
' Передача параметров
'************************************
Sub MyArguments(Optional a As Integer = 5, Optional b As String = " плюс ", Optional c As Integer = 10)
Label1.Caption = a & b & c
End Sub
Private Sub CommandButton1_Click()
MyArguments
End Sub
Private Sub CommandButton2_Click()
MyArguments 100, " минус ", 50
End Sub
Private Sub CommandButton3_Click()
MyArguments 20, , 30
End Sub
Private Sub UserForm_Initialize()
Label1.Caption = ""
Label1.FontSize = 15
Label1.ForeColor = vbBlue
CommandButton1.Caption = "Вариант 1"
CommandButton2.Caption = "Вариант 2"
CommandButton3.Caption = "Вариант 3"
End Sub
В данном примере на поверхности формы находится всего одна метка и три кнопки. Каждая из кнопок будет производить VBA вызов процедуры MyArguments с различными значениями.
Передача параметров по ссылке и по значению – по умолчанию, при вызове процедуры все параметры ей передаются по ссылке. Передача по ссылке – в простом варианте, это передача адреса по которому хранится значение. При передаче параметра по ссылке, передается не адрес, а копия значения.
Что бы все стало понятно, рассмотрим следующий пример:
'************************************
' Передача параметров
'************************************
Sub MySub1()
Dim MyVar
MyVar = 100
Call MySumm1(MyVar)
Label1.Caption = "Передача по ссылке " & MyVar
End Sub
Sub MySub2()
Dim MyVar
MyVar = 100
Call MySumm2(MyVar)
Label2.Caption = "Передача по значению " & MyVar
End Sub
Sub MySumm1(ByRef a)
a = a + 100
End Sub
Sub MySumm2(ByVal a)
a = a + 100
End Sub
Private Sub CommandButton1_Click()
MySub1
MySub2
End Sub
Private Sub UserForm_Initialize()
Label1.Caption = ""
Label1.FontSize = 15
Label1.ForeColor = vbBlue
Label2.Caption = ""
Label2.FontSize = 15
Label2.ForeColor = vbRed
CommandButton1.Caption = "Проверить"
End Sub
MySub1 – тут происходит объявление переменной MyVar и присвоение ей значения 100, далее в теле происходит вызов VBA процедуры MySumm1, ей в качестве параметры мы передаем значение переменной MyVar – 100. Сама процедура MySumm принимает значение по ссылке, на что указывает ключевое слово ByRef, к принятому значению прибавляется число 100. Стоит обратить внимание, что ByRef можно было и не писать. После VBA вызова процедуры MySumm1 происходит запись значения переменной MyVar в свойство Caption объекта Label1, в итоге, отобразится число 200.
MySub2 – аналог предыдущей процедуры, но тут происходит вызов MySumm2, в которой происходит передача параметров по значению, о чем говорит ключевое слово ByVal, в итоге, значение переменной MyVar не изменится.
VBA процедуры типа Function – функции
Пользовательским функциям языка VBA присущи практически те же правила, что и подпрограммам. Общая структура функции:
Function ИмяФункции ([аргументы]) [As ТипДанных]
Операторы
[Exit Function]
Операторы
[ИмяФункции=Выражение]
End Function
Видим, что тут при объявлении функции можно указать ее тип, данный тип будет содержать возвращаемое значение. Что бы функция возвращала значение, в конце нужно его присвоить переменной с именем функции, например:
Function Summ(a As Integer, b As Integer) As Integer
Summ = a + b
End Function
Private Sub CommandButton1_Click()
Label1.Caption = "Сумма 10 и 20: " & Summ(10, 20)
End Sub
Private Sub UserForm_Initialize()
Label1.Caption = ""
Label1.FontSize = 15
Label1.ForeColor = vbBlue
CommandButton1.Caption = "Сумма"
End Sub
По теме: методические разработки, презентации и конспекты
МЕТОДЫ И ПРОЦЕДУРЫ ИЗМЕРЕНИЯ ДВИГАТЕЛЬНЫХ СПОСОБНОСТЕЙ
МЕТОДЫ И ПРОЦЕДУРЫ ИЗМЕРЕНИЯ ДВИГАТЕЛЬНЫХ СПОСОБНОСТЕЙ, Методика проведения тестирования физических качеств...
Конспект занятия по теме " Главные, финальные заезды. Процедура стартов"
Конспект занятия с лекцией по теме "Главные, финальные заезды. Процедура стартов". Служит для подготовки спортсменов - картингистов к соревнованиям по картингу....
Функции семьи. Типы семейного воспитания.
В данном материале раскрывается понятие семьи и семейного воспитания, перечислены и раскрыты типы и функции семьи....
Методическая разработка по теме «Структура, функции и основные типы современного урока»
В данной работе рассматриваются основные аспекты современного урока в соответствии с требованиями ФГОС....
Памятка: типы и формы уроков; методы обучения; структура разных типов уроков; виды, формы и средства контроля
В памятке систематизирован и концентрирован материал в табличной форме: различные формы уроков, методы обучения, виды, формы и средства контроля; основные задачи и структура разных типов уроков....
МЕТОДИЧЕСКАЯ РАЗРАБОТКА ПРАКТИЧЕСКОГО ЗАНЯТИЯ По ОБЩЕОБРАЗОВАТЕЛЬНОЙ УЧЕБНОЙ ДИСЦИПЛИНЫ Математика: алгебра и начала математического анализа; геометрия Раздел 6: Функции и графики Тема: «Показательная функция, её график и свойства. Логарифмическая функци
Методическое пособие разработано для преподавателей и студентов с целью формирования знаний, умений по теме: «Показательные и логарифмические функции». В процессе практического занятия сту...
МДК.02.01 Технология косметических услуг ТЕСТ по теме: Строение, функции кожи. Типы кожи
https://onlinetestpad.com/ccwu7t5bghdueПерейдите по ссылке и выполните тест...