Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
VBA поддерживает два типа подпрограмм: процедуры и функции.
· Функция – это подпрограмма, которая возвращает результат. Вызов функции является выражением и может использоваться в других выражениях или в правой части оператора присваивания.
· Процедура – это любая подпрограмма, которая не является функцией. Любой макрос VBA является подпрограммой типа «процедура».
Процедура является самостоятельной частью кода, которая имеет имя и может содержать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов.
Для объявления процедуры в VBA используется ключевое слово Sub:
Sub <имяПроцедуры> [(<списокПараметров>)]
<операторы> End Sub,
где:
<имяПроцедуры> – любой допустимый идентификатор VBA;
<списокПараметров> – список формальных параметров процедуры, если он пуст, то такая процедура является макросом;
<операторы> – любая последовательность операторов VBA.
Синтаксис объявления функции несколько сложнее, чем синтаксис процедуры:
Function <имяФункции> [(<списокПараметров>)] [As <типФункции>]
<операторы>
...
<имяФункции> = <возвращаемое_значение> [<операторы>]
End Function,
где:
<имяФункции> – любой допустимый идентификатор;
<списокПараметров> – список формальных параметров процедуры;
<типФункции> – имя любого поддерживаемого VBA типа данных;
<операторы> – любая последовательность операторов VBA.
<возвращаемое_значение> – результат, передаваемый в вызывающую программу.
Подпрограммы VBA могут принимать для обработки формальные параметры, указываемые при объявлении. При вызове они заменяются фактическими параметрами, т. е. реально используемыми в вызывающей программе.
В VBA список формальных параметров подпрограммы представляет имена переменных, разделённых запятой. При этом желательно указать тип каждой переменной:
Function | Sub <имяПроцедуры> (<параметр1> As <тип>, _
<параметр2> As <тип>,..., <параметрN> As <тип>).
Если тип данных параметра не указан, то автоматически будет использован тип Variant.
Список параметров может быть пустым как для процедуры, так и для функции. В этом случае после имени процедуры ставятся пустые круглые скобки.
При передаче фактических параметров в подпрограмму может использоваться один из двух различных способов:
· передача по значению;
· передача по ссылке.
При передаче по значению в подпрограмме создаётся копия переданного фактического параметра. Все действия внутри подпрограммы выполняются над этой копией и при выходе из подпрограммы все изменения теряются.
Если переменная передаётся по ссылке, то процедуре или функции будет передан адрес этой переменной. Тем самым вызываемая процедура может изменить значение фактического параметра: если будет изменён формальный параметр процедуры, то переданный при вызове ей фактический параметр тоже изменит своё значение.
Способ передачи указывается при описании параметров в строке объявления подпрограммы. Имени параметра может предшествовать один из явных описателей способа передачи:
· ByRef – задаёт передачу по ссылке;
· ByVal – задаёт передачу по значению.
По умолчанию выполняется передача по ссылке.
Вызов подпрограмм
Подпрограммы могут быть вызваны различными способами:
· Процедуру (Sub)с непустым списком параметров можно вызвать только из другой процедуры или функции так:
<имяПроцедуры> <списокПараметров>
Или так:
Call <имяПроцедуры> (<списокПараметров>)’ использована инструкция Call.
· Процедура с пустым списком параметров рассматривается VBA как командный макрос. Её также можно вызвать двумя способами:
- из другой процедуры или функции;
- с помощью комбинации клавиш быстрого вызова, команд меню или кнопок панелей инструментов.
· Функцию (Function) можно вызывать точно так же, как и процедуру, в виде отдельного оператора. В этом случае возвращаемое функцией значение игнорируется.
Процедуры позволяют разбивать программные модули на небольшие логические блоки. В Visual Basic существуют следующие виды процедур:
VBA позволяет создавать три типа процедур Sub, Function и Property. При запуске процедуры Sub выполняются команды процедуры, а затем управление передаётся в приложение или процедуру, которая вызвала процедуру Sub.
Function (функция) также решает определённую задачу. Различие заключается в том, что функция возвращает единственное значение, поэтому обычно используется для выполнения вычислений.
Property используется для ссылки на свойство объекта. Применяется для установки или получения значения пользовательских свойств форм и модулей. Процедуры Sub подразделяются на процедуры, связанные с элементами управления (событийные) и процедуры общего назначения.
Пример оформления самостоятельной работы
Задание
Даны матрицы:
. .
Найти максимальный элемент в каждой матрице. Использовать подпрограмму.
На рисунке 33 представлена блок-схема функции.
На рисунках 34 и 35 представлена блок-схема и результат работы основной программы.
Рисунок 33 – Блок-схема процедуры
Рисунок 34 – Блок-схемы основной программы
Рисунок 35 – Результат работы приложения
Событийная процедура кнопки Вычислить
Dim c(1 To 6, 1 To 6) As Single
Function maxum(k, L, n, m)
max = -10000
For i = 1 To n
For j = 1 To m
c(i, j) = Cells(i + k, j + L)
If c(i, j) > max Then max = c(i, j)
Next j
Next i
maxum = max
End Function.
Private Sub CommandButton1_Click()
Dim c(1 To 6, 1 To 6) As Single
Dim b(1 To 6, 1 To 6) As Single
Dim i, j, k, L, m, n As Byte
For i = 1 To 3
For j = 1 To 4
c(i, j) = Cells(i + 1, j)
Next j
Next i
n = 3
m = 4
k = 1
L = 0
maxa = maxum(k, L, n, m)
TextBox1.Text = Format(maxa, "0.00")
k = 6
L = 2
maxb = maxum(k, L, 5, 2)
TextBox2.Text = Format(maxb, "0.00")
End Sub.
Дата публикования: 2014-11-02; Прочитано: 452 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!