
- •1 Некоторые сведения о программировании на vba
- •1.1 Вызов редактора Visual Basic.
- •1.2 Состав проекта
- •1.3 Элементы управления
- •1.4 Некоторые свойства и события элементов управления
- •1.5 Типы данных в vba
- •1.6 Некоторые встроенные функции vba
- •Функция InputBox
- •Процедура MsgBox
- •1.7 Процедуры и функции
- •1.8 Основные объекты vba
- •Свойства и методы объектов семейства Worksheets
- •Объекты Cells, Range и Selection
- •Свойства и методы объекта Range
- •1.9 Основные операторы vba
- •Оператор присваивания
- •Условный оператор
- •If условие then инструкции 1 else инструкции 2
- •If условие then
- •If условие1 then
- •If условие then инструкции 1
- •Оператор выбора
- •Оператор с заданным количеством повторений.
- •Оператор цикла по множеству
- •Операторы цикла Do … Loop
- •Оператор цикла While … Wend
- •2 Варианты заданий Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •3 Образец выполнения работы
- •3.1 Задание
- •3.2 Создание исходных таблиц
- •3.3 Создание формы UserForm1
- •3.4 Создание формы UserForm2
- •3.5 Создание функции пользователя
- •3.4 Создание формы UserForm3
- •Список литературы
1.7 Процедуры и функции
Процедура – это самостоятельная программная единица VBA. Процедура имеет следующую структуру:
Sub ИмяПроцедуры (список формальных параметров)
Описания локальных переменных
Инструкции и операторы
End Sub
Бывают процедуры без параметров, тогда в первой строке после имени процедуры ставят пустые скобки. Если процедура обрабатывает какое-то событие, происходящее с объектом, то по умолчанию ее имя состоит из имени объекта и события, разделенных символом подчеркивания. Например, процедура CommandButton1_Click( ) выполняется при щелчке мышки по командной кнопке с номером 1. Код такой процедуры привязан к объекту и записывается в окне кода (см. рис. 1.4). Для каждого Листа Excel и для каждой формы существуют отдельные окна кода.
Код процедуры может быть записан и в отдельном модуле. Если процедура имеет параметры, то они должны быть описаны в заголовке процедуры. Например:
Sub test ( x As Single, y As Single )
Пример 1. Напишем процедуру, которая будет спрашивать имя пользователя и выводить приветствие. Результат – на рис. 1.7.
Sub привет( )
Dim name As String
name = InputBox("Как Вас зовут?")
MsgBox "Привет, " & name & " !"
E
nd
Sub
Рисунок 1.7 – Образец работы программы "привет"
Процедуру можно вызвать из другой процедуры. При этом формальные параметры надо заменить фактическими. Формальные и фактические параметры должны быть согласованы, то есть:
количество формальных и фактических параметров должно быть одинаковым;
порядок формальных и фактических параметров должен быть одинаковым;
типы формальных и фактических параметров, стоящих на одинаковых местах, должны совпадать;
имена формальных и фактических параметров могут быть разными.
Чтобы выполнить процедуру, легче всего кликнуть мышкой в любом месте ее кода и нажать кнопку Run Sub/UserForm на панели инструментов (рис. 1.2). Для вызова процедуры из другой процедуры надо сначала записать ее имя, а после пробела ввести значения фактических параметров через запятую.
Пример 2. Запишем процедуру, которая вычисляет квадрат и куб числа. Вызовем ее из другой процедуры, которая вводит число и выводит результаты (см. рис. 1.7).
Sub степень(x As Single, x2 As Single, x3 As Single)
x2 = x * x
x3 = x2 * x
End Sub
Sub пример2()
Dim a As Single, a2 As Single, a3 As Single
a = InputBox("Введите число")
степень a, a2, a3
MsgBox "Ответ: x ^ 2=" & Str(a2) & " x ^ 3=" & Str(a3)
End Sub
Р
исунок
1.7 – Результаты
работы программы "пример2"
Функция позволяет вычислять одно значение от нескольких аргументов. Код функции записывается в модуле. Синтаксис функции:
Function ИмяФункции (список формальных параметров) As Тип
Описания локальных переменных
Инструкции и операторы
ИмяФункции = выражение
End Function
Тип результата вычисления функции должен указываться явно в заголовке функции. ИмяФункции должно принимать значение результата внутри тела функции.
Вызов функции осуществляется из процедуры или с Листа Excel.
Синтаксис вызова функции из процедуры:
Переменная = ИмяФункции (список фактических параметров)
Список формальных и фактических параметров должны соответствовать друг другу по тем же правилам, что и у процедур.
Чтобы вызвать функцию с Листа Excel, надо в той клетке, где должен быть результат, записать выражение такого вида:
= ИмяФункции (список адресов ячеек, содержащих параметры)
Пример 3. Запишем функцию, которая вычисляет куб числа, и вызовем ее из процедуры.
Function Куб ( x As Single ) As Single
Куб = x * x * x
End Function
Sub пример3( )
Dim a As Single, b As Single
a = InputBox("Введите число")
b = Куб(a)
MsgBox "Куб числа " & Str(a) & " = " & Str(b)
End Sub