PDF_LABS / ЛР_7
.pdfЛР_7
Лабораторная работа №7
Реализация функций пользователя на VBA
Задание
1.Разработать пользовательские функции VBA для функций, использованных в лабораторной работе №6.
2.Создать таблицу значений функций, в которой для каждой из трёх функций выводится два столбца. В первом из столбцов используется реализация функции средствами программы Microsoft Excel, а во втором реализация этой же функции в среде VBA.
3.Сравнить результаты в парах столбцов и убедиться в их идентичности.
4.Для одной из функций создать кнопку, вызывающую выполнение процедуры табулирования одной из функций.
Пример выполнения лабораторной работы
1.Для реализации задания ЛР № 7 создаём новый лист в книге
Excel.
2.Копируем 4 первых строки документа ЛР № 6 и вставляем их на созданный перед этим лист.
3.В ячейке А1 изменим текст заголовка
Табулирование трех функций
на
Табулирование трех функций с использованием средств VBA
4.В 5-й строке формируем заголовок таблицы результатов
-в А5 вводим символ Х;
-в В5 вводим строку Y(X);
-в С5 вводим строку Yvba(X);
-в D5 вводим строку G(X);
-в E5 вводим строку Gvba(X);
-в F5 вводим строку Z(X);
-в E5 вводим строку Zvba(X);
5.Формируем столбец значений Х так же, как в ЛР_6.
6.В ячейку В6 вводим формулу для вычисления значения функции
Y(X).
=SIN($G$4*A6)/(A6+3)+$I$4*A6^2
ипротягиваем её по столбцу до ячейки В16.
1 |
Любимов Е.Б. |
ЛР_7
7.В меню Microsoft Excel выбираем команду Разработчик и на ленте этой команды нажимаем кнопку Visual Basic. Это действие открывает окно Microsoft Visual Basic for Applications. В меню этого окна выбираем команду Insert.
Если до этого обращения в данной книге не создавались и не использовались пользовательские функции VBA, открывается меню, в котором, если активны три пункта (см. рис.7.1).
Рис. 7.1, Окно Microsoft Visual Basic for Applications при первом выборе команды Insert
8.Для продолжения работы и создания пользовательской функции, реализующей вычисления функции Y(X), следует сначала создать модуль - пространство, объект в котором можно будет записать текст функции. Выберем команду меню Module.
Рис. 7.2, Окно модуля, созданное при выполнении команды Insert ÆModule
2 |
Любимов Е.Б. |
ЛР_7
9. В первую строку модуля введём инструкцию Visual Basic Option Explicit
Эта команда включает режим работы компилятора Visual Basic, обеспечивающий контроль переменных, используемых в инструкциях программы.
10.Следующим шагом в меню окна Microsoft Visual Basic снова выбираем команду Insert. В открывающемся после создания модуля меню активны все команды. Выбираем команду
Procedure… Открывается окно Add Procedure.
Рис. 7.2. Окно Add Procedure
11.В поле Name: вводим имя первой создаваемой функции Y.
12.В группе Type выбираем переключатель Function и нажимаем кнопку ОК.
13.В окне модуля формируется заготовка текста функции
Public Function Y()
End Function
14.Используя эту заготовку, введём инструкции, необходимые для реализации функции (1).
Public Function Y(a As Double, b As Double, x As Double) As Double Y = Sin(a * x) / (x + 3) + b * x ^ 2
End Function
3 |
Любимов Е.Б. |
ЛР_7
15.Вернёмся в окно программы Microsoft Excel и в ячейку С6 введём обращение к функции Y.
Для этого в строке формул нажмём кнопку Вставить функцию.
В окне Мастер функций - шаг 1 из 2 в списке Категория: выбираем категорию Определённые пользователем. В поле со списком Выберите функцию: выбираем функцию Y (см.
рис. 7.3).
Рис. 7.3. Окно мастера функций
16.Нажимаем кнопку ОК и открываем окно 2-го шага мастера функций (рис. 7.4).
Рис. 7.4. Окно 2-го шага мастера функций
4 |
Любимов Е.Б. |
ЛР_7
17.Заполняем поля окна Аргументы функции и вычисляем значение функции в точке Хнач.
Рис. 7.5. Заполненное окно 2-го шага мастера функций
18.Протягиваем обращение к функции Y по столбцу С. Сравниваем полученные значения со значениями в столбце В.
19.Нажимаем кнопку Сохранить на панели быстрого доступа
Microsoft Excel. Открывается окно предупреждающее о необходимости изменения расширения файла для сохранения в нём макросов, обеспечивающих работоспособность функций
VBA.
Рис. 7.6. Окно предупреждающее о необходимости смены типа файла
20.В этом окне нажимаем кнопку Нет и в открывающемся окне Сохранение документа изменяем расширение .xlsx на расширение .xlsm.
21.Повторяя действия по методике п.6 - п.18 для функций G(x) и Z(x), создадим функции Gvba(x) и Zvba(x), заполним столбцы от D до F и сравним значения функций, полученные в этих столбцах.
5 |
Любимов Е.Б. |
ЛР_7
Ниже приведены записи текстов функций, реализованных в одном модуле VBA.
Public Function G(a As Double, b As Double, x As Double) As Double If x > 0 Then G = a * Sqr(x) Else G = b * x
End Function
Public Function Z(a As Double, b As Double, x As Double) As Double If x < -0.5 Then Z = 1 + Sin(b * x) _
Else If x <= 0.5 Then Z = a * Cos(b * x) / (a + b * x) Else Z = b + ax End Function
После ввода обращения к функции Z вячейкутаблицыG6
=Z($G$4;$I$4;A6)
при нажатии на кнопку Ввод в строке формул программа автоматически переходит в среду компилятора VBA и выводит сообщение об ошибке (рис. 7.7)
Рис. 7.7.
Нажав кнопку ОК в этом окне, переходим в окно редактора VBA
(рис. 7.8).
Рис. 7.8.
Выделенные в строке инструкции символы определяют место ошибки и позволяют определить её причину. В нашем случае это отсутствие знака операции между идентификаторами а и х.
Следует также обратить внимание на то, что если бы мы не включили в текст инструкций модуля инструкции Option Explicit, сообщения об ошибке не было бы. Но при выполнении вычислений полученные результаты окажутся неверны. (Рекомендую проверить
6 |
Любимов Е.Б. |
ЛР_7
это самостоятельно. Для того, чтобы отключить оператор Option Explicit достаточно ввести перед ним символ апостроф « ' ».).
Исправим ошибку, введя символ « * » между буквами ах. Для того, чтобы завершить работу компилятора и получить возможность продолжить отладку процедуры, необходимо нажать кнопку Reset (рис. 7.9) в строке меню программы Microsoft Visual Basic for Applications.
Рис. 7.9.
После чего можно продолжить работу в программе Microsoft Excel. Результаты выполнения после проведённого форматирования приведены на рис. 7.10.
7 |
Любимов Е.Б. |
ЛР_7
Рис. 7.9.
8 |
Любимов Е.Б. |