
- •Введение
- •Основные понятия объектно-ориентированного программирования
- •Основные элементы управления в редакторе vba
- •Стандартные приемы программирования в среде vba Введение
- •Отладка программы
- •Основные элементы программного кода в среде vba Описание переменных
- •Константы
- •Операторы присваивания
- •Арифметические выражения
- •Логические выражения
- •Текстовые выражения
- •Линейные программы
- •Оператор перехода
- •Конструкции принятия решений
- •Ветвление по условиям
- •Циклы в программе
- •Массивы
- •Пользовательские процедуры
- •Две основные функции преобразования типов данных
- •Ввод, вывод и генерация исходных данных
- •Приемы работы в среде программирования vba
- •Запуск среды vba
- •Создание функции пользователя
- •Создание макрокоманды (макроса)
- •Создание пользовательской формы
- •Работа с листами книги
- •Лабораторные задания по темам Целочисленное программирование
- •Ввод и вывод данных, оператор присваивания
- •Логические выражения: группа Boolean
- •Условный оператор: группа If
- •Оператор выбора
- •Цикл с параметром: группа For
- •Цикл с условием: группа While
- •Массивы
- •Функции и процедуры
- •Контрольные вопросы
- •Список литературы
- •Содержание
- •420015, Казань, к. Маркса, 68
Приемы работы в среде программирования vba
Теперь разберем пошагово весь процесс создания своей программы, начиная от простой функции пользователя до создания своей оконной формы пользователя.
Запуск среды vba
Находясь в любом пакете MS Office, можно вызвать оболочку VBA комбинацией клавиш Alt+F11 или по следующей команде СервисМакросРедактор Visual Basic. Открывается окно похожее на рис.1 в зависимости от настроек системы. Переходы между оболочкой программирования и самим пакетом происходят через указанную выше комбинацию горячих клавиш Alt+F11.
Создание функции пользователя
Создадим свою функцию, например, нам нужно часто использовать какое-либо достаточно большое уравнение. Назовем функцию «My_fun» и в дальнейшем будем использовать в наших расчетах. В качестве простейшего примера создадим полином следующего вида:
В первом варианте примем, что наши коэффициенты А0, А1 и А2 известны и имеют соответственно следующие значения 21, 5 и 0.5. Нам надо задать значение Х и получить значение Y. Начинаем создавать свою первую программу.
Сначала вставляем в наш проект новый модуль, который собственно и содержит программный код. Для этого выполняем команду InsertModule, здесь нельзя ошибаться и выбрать не Module, а Class Module, который создаст специальный модуль нового объекта, что нам пока не надо. В рабочей области экрана появляется чистая область модуля, куда теперь можно вносить программный код.
Т
Рис.17. Вставка процедуры
Обязательно помните, что начинать имя процедуры с цифры и ставить пробелы внутри него недопустимо!!!
Во-вторых, выбираем тип процедуры – функция (Function), так как мы хотим иметь ее в качестве функции пользователя на листах данной книги. Затем выбираем область видимости процедуры (Scope) как общую (Public). Если мы укажем ее как внутреннюю (Private), то она не будет видна на листах книги. Данное свойство надо использовать только для внутренних процедур, о которых разговор будет далее. Теперь можно нажимать кнопку Ok, и в окне модуля получаем заготовку самой процедуры в виде следующего текста:
Public Function My_fun()
End Function
Начинаем писать программный код. Так как функция имеет входной параметр Х, то мы должны внести его имя в строку после имени процедуры внутри скобок. В пустую строку записываем код вычисления значения Y, используя правило – надо присвоить к переменной с именем процедуры (без скобок, которые имеются в заголовке) возвращаемое значение. Самый простой вариант записи будет выглядеть так
Public Function My_fun(X)
My_fun = 21 + 5 * Х + 0.5 * Х ^ 2
End Function
Если необходимо выполнить более сложные вычисления, то перед присвоением результата имени функции могут располагаться и другие операторы. Это может выглядеть так
Y = 21 + 5 * Х + 0.5 * Х ^ 2
My_fun = Y
Т
Рис.18. Мастер построения
функций
Теперь попробуем сделать данную функцию более гибкой в своем использовании. Сделаем коэффициенты уравнения параметрическими, то есть они будут передаваться как аргументы функции.
Рис.19. Окно ввода аргументов в функцию пользователя
Внесем следующие изменения в программный код функции: добавим за именем функции в скобках перед параметром Х новые имена в список формальных параметров и пропишем их в самой функции. Для этого заменим наши константы 21, 5 и 0.5 в вычисляемом уравнении на соответствующие параметры А0, А1, А2.
Чтобы сохранять все созданные процедуры, будем перед исправлениями копировать весь код и изменять имя процедуры, добавляя к нему очередной номер. В приведенном ниже примере имя функции изменено на My_fun1.
Public Function My_fun1(A0, A1, A2, X)
My_fun1 = A0 + A1 ^ X + A2 * X ^ 2
End Function
Чтобы использовать эту функцию на листе книги, необходимо подготовить исходные данные на листе. Для этого введем в ячейки А1–А3 имена коэффициентов, чтобы наглядно видеть в какие ячейки вводить исходную информацию, и сразу же иметь готовую таблицу для ее использования в отчетах. В ячейки В1–В3 введем значения самих коэффициентов уравнения.
A0 |
21 |
X |
A1 |
5 |
10 |
A2 |
0,5 |
12 |
|
|
14 |
|
|
16 |
|
|
18 |
|
|
20 |
|
|
22 |
После ввода функции, растягиваем эту формулу с помощью маркера заполнения на группу ячеек Е3 – Е8.
Попробуем создать следующую функцию My_fun2, которая будет вычислять полином любого порядка. Ее аргументами должны быть – степень полинома (N), массив коэффициентов Ai из N+1 элементов и значение параметра Х. Программа показана ниже. Рекомендуем создать заготовку процедуры My_fun2, как было показано выше, и в заголовок ввести формальные параметры, а внутри заготовки записать сам код
Рис.20. Окно ввода аргументов в функцию пользователя My_fun1
Public Function My_fun2(N, Ai, X)
Dim Aa()
ReDim Aa(N)
i = 0
For Each Cl In Ai.Cells
Aa(i) = Cl.Value
i = i + 1
Next
Y = Aa(0)
For i = 1 To N
Y = Y + Aa(i) * X ^ i
Next i
My_fun2 = Y
End Function
Разберем процедуру более подробно. Первая строка после заголовка описывает динамический массив. Во второй строке массив переопределяется под необходимый размер, здесь мы указываем его размер N. Далее заполняем его значениями коэффициентов, перебирая все ячейки, которые переданы в качестве аргумента Ai в процедуру, и присваивая их значения элементам массива коэффициентов Аа. Подготавливаем переменную Y для суммирования членов полинома, приравнивания ее нулевому коэффициенту полинома. Потом реализуем алгоритм вычисления полинома любого порядка суммированием коэффициентов, умноженных на значение Х в степени равной индексу коэффициента. Введем третью функцию на наш лист. Окно ввода аргументов функции показано на рис.21.
Рис.21. Окно ввода аргументов в функцию пользователя My_fun2
Список коэффициентов уравнения вводится как группа ячеек, которые так же задаются абсолютным адресом.
Попробуем свести все результаты вычислений в одну таблицу для оценки точности их результата. Как видим, результат вычисления во всех случаях остается одинаковым (см. таблицу ниже).
A0 |
21 |
X |
My_fun |
My_fun1 |
My_fun2 |
A1 |
5 |
10 |
121 |
121 |
121 |
A2 |
0,5 |
12 |
153 |
153 |
153 |
|
|
14 |
189 |
189 |
189 |
|
|
16 |
229 |
229 |
229 |
|
|
18 |
273 |
273 |
273 |
|
|
20 |
321 |
321 |
321 |
|
|
22 |
373 |
373 |
373 |