VBA: типы процедур и функций
план-конспект занятия на тему

VBA процедуры типа Sub – подпрограммы

Скачать:

ВложениеРазмер
Microsoft Office document icon tipy_vba_protsedur_lektsiya_praktika.doc146.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 вызов процедуры

Теперь в редакторе кода для формы пропишите:

'************************************

' Вычисление гипотенузы

'************************************

' процедура 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

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 – позволяет указать, что аргумент не является обязательным и одновременно задать значение по умолчанию.

VBA Sub и Function

Например:

'************************************

' Передача параметров

'************************************

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 с различными значениями.

Передача параметров по ссылке и по значению – по умолчанию, при вызове процедуры все параметры ей передаются по ссылке. Передача по ссылке – в простом варианте, это передача адреса по которому хранится значение. При передаче параметра по ссылке, передается не адрес, а копия значения.

Передача VBA параметров по ссылке и по значению

Что бы все стало понятно, рассмотрим следующий пример:

'************************************

' Передача параметров

'************************************

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


 


По теме: методические разработки, презентации и конспекты

МЕТОДЫ И ПРОЦЕДУРЫ ИЗМЕРЕНИЯ ДВИГАТЕЛЬНЫХ СПОСОБНОСТЕЙ

МЕТОДЫ И ПРОЦЕДУРЫ ИЗМЕРЕНИЯ ДВИГАТЕЛЬНЫХ СПОСОБНОСТЕЙ,  Методика проведения тестирования физических качеств...

Конспект занятия по теме " Главные, финальные заезды. Процедура стартов"

Конспект занятия с лекцией по теме "Главные, финальные заезды. Процедура стартов". Служит для подготовки спортсменов - картингистов к соревнованиям по картингу....

Методическое пособие по выполнению лабораторной работы № 5 "Изучение работы программы по восстановлению работоспособности и тестированию жесткого диска - VICTORIA: основные опции и процедуры. Тестирование жесткого диска" для МДК.02.02

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответсвии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подготов...

Функции семьи. Типы семейного воспитания.

В данном материале раскрывается понятие семьи и семейного воспитания, перечислены и раскрыты типы и функции семьи....

Методическая разработка по теме «Структура, функции и основные типы современного урока»

В данной работе рассматриваются основные аспекты современного урока в соответствии с требованиями ФГОС....

Памятка: типы и формы уроков; методы обучения; структура разных типов уроков; виды, формы и средства контроля

В памятке систематизирован и концентрирован материал в табличной форме: различные формы уроков, методы обучения, виды, формы и средства контроля; основные задачи и структура разных типов уроков....

МЕТОДИЧЕСКАЯ РАЗРАБОТКА ПРАКТИЧЕСКОГО ЗАНЯТИЯ По ОБЩЕОБРАЗОВАТЕЛЬНОЙ УЧЕБНОЙ ДИСЦИПЛИНЫ Математика: алгебра и начала математического анализа; геометрия Раздел 6: Функции и графики Тема: «Показательная функция, её график и свойства. Логарифмическая функци

Методическое пособие разработано для преподавателей и студентов с целью формирования знаний, умений по теме: «Показательные и логарифмические функции». В процессе практического занятия сту...