Последовательность выполнения Упражнения 17
Лабораторная работа №5 Процедуры-функции
Функции VBA
Функция - это подпрограмма, которая выполняет действия и возвращает единственное значение. В VBA различают следующие виды функций (см.п. 2.13. учебного пособия Теория_к_лаб_5.doc,):- встроенные функции,- функции, определённые пользователем.Встроенные функции
- математические функции,- функции преобразования данных,- функции даты и времени,- строковые функции.Форматы функций и действия, выполняемые ими, приведены в
п.2.13.1.Встроенные функции учебного пособия Теория_к_лаб_5.doc,,
Скопируйте в модуль VBA процедуры, находящиеся
в п. 2.13.1.5. Примеры использования функций VBA учебного пособия Теория_к_лаб_5.doc,: Встр_функции_1, Встр_функции_2,…, Встр_функции_8, – выполните их, проанализируйте результаты выполнения процедур, замените по вашему выбору значения констант, являющихся значениями аргументов функции и/или введите значения переменных, являющихся аргументами функций, при помощи функции
InputBox. Согласуйте свой выбор с преподавателем. Например, изменённая процедура Встр_функции_8 может иметь вид:
Sub Встр_функции_8()
Dim Дата As Date
Дата = InputBox("Введите дату", "Ввод даты")
MsgBox Format(Дата, "Long Date") & vbCr _
& Format(Дата, "Medium Date") & vbCr _
& Format(Дата, "Short Date") & vbCr _
& Format(Дата, "dd mmmm yy") & vbCr _
& Format(Дата, "dd mm yy") & vbCr _
& Format(Дата, "dd mm yyyy")
End Sub
Функции, определённые пользователем
Функция, определённая пользователем, называемая также процедурой-функцией, – это особый вид процедуры VBA, возвращающей результат. Пользовательские процедуры-функции, как и встроенные функции VBA, могут иметь необязательные и именованные аргументы. Для записи функции-процедуры нельзя использовать макрорекордер, хотя можно редактировать записанный рекордером макрос и превращать его в функцию-процедуру.
Подробное описание функции, определённой пользователем, и пример такой функции приведён в п.2.13.2. Функции, определённые пользователем учебного пособия Теория_к_лаб_5.doc .
Упражнение 17
Суть упражнения состоит в следующем. В приведённой ниже таблице
Суммы комиссионных | |||
Компания | Продажи | Комиссионные | Оплата |
ЮГ | 5 000,00р. | ||
СЕВЕР | 7 000,00р. | ||
ВОСТОК | 12 000,00р. | ||
ЗАПАД | 1 600,00р. |
требуется подсчитать суммы комиссионных и оплаты. Суммы комиссионных подсчитываются в процедуре-функции Комиссионные, обращение к которой осуществляется в процедуре Расчёт_Комиссионных при помощи инструкции
Cells(i, 3) = Комиссионные(Cells(i, 2)),
параметром которой является сумма продаж, находящаяся в ячейках Excel B3÷B6 (Cells(3, 2) – это ячейка в строке 3 в столбце 2 (B3) и т.п.).
Тексты процедуры Расчёт_Комиссионныхи функции Комиссионные приведены в п.2.13.2.1. Пример функции учебного пособия
Теория_к_лаб_5.doc,.
Ниже приведён пример заполненной таблицы исходными данными в столбцах Компания и Продажи.
Последовательность выполнения Упражнения 17
1.3.1.Скопировать в модуль VBA процедуру-программу
“Расчёт_Комиссионных” и процедуру-функцию “Комиссионные” из пособия Теория_к_лаб_5.doc ,п.2.13.2.1.
1.3.2.Ввести заголовок таблицы в ячейку A1.
1.3.3.Ввести заголовки таблицы Компания, Продажи, Комиссионные, Оплата в ячейки A2, B2, C2, D2.
1.3.4.Заполнить исходными данными из примера колонки Компания и Продажи.
1.3.5.Выполнить процедуру “Расчёт_Комиссионных”. В результате должна быть получена приведённая ниже таблица.
1.3.6.Суммы комиссионных | |||
Компания | Продажи | Комиссионные | Оплата |
ЮГ | 5 000,00р. | 5 250,00р. | |
СЕВЕР | 7 000,00р. | 7 370,00р. | |
ВОСТОК | 12 000,00р. | 12 710,00р. | |
ЗАПАД | 1 600,00р. | 1 680,00р. |
1.3.7.Проанализировать результаты выполнения процедуры и сравнить их с инструкциями процедуры-программы
“Расчёт_Комиссионных” и процедуры-функции “Комиссионные”.
1.3.8.Составить макрос, который выводит на текущий лист Excel приведённую ниже таблицу без исходных данных, которые должны вводиться в процессе работы с таблицей.
1.3.9.
Макрос создания этой таблицы целесообразно создать путём записи действий пользователя, аналогично п. 2.1 или 2.2. настоящего пособия. Необходимо записать в этот макрос следующие действия пользователя:
- Ввод заголовка таблицы “Суммы комиссионных”.
- Отформатировать заголовок жирным шрифтом.
- Объединить ячейки A1÷D1.
- Отформатировать жирным курсивом заголовки колонок таблицы.
- Установить автоподбор ширины колонок таблицы.
- Дать этому макросу название, например,
ФорматированиеТаблицы.
- Запустить макрос на выполнение и при необходимости его отладить.
- Проанализировать полученный макрос и, по возможности, упростить его, удалив инструкции, устанавливающие параметры по умолчанию.
1.3.10. Вставить инструкцию Call <Имя-макроса> перед инструкцией End Sub в процедуре “Расчёт_Комиссионных”.
1.3.11. Удалить полученные ранее таблицы, сформировать таблицу:
Суммы комиссионных | |||
Компания | Продажи | Комиссионные | Оплата |
ЮГ | 5 000,00р. | ||
СЕВЕР | 7 000,00р. | ||
ВОСТОК | 12 000,00р. | ||
ЗАПАД | 1 600,00р. |
и выполнить процедуру “Расчёт_Комиссионных”.
1.3.12. Составить пользовательскую функцию “Комиссионные_2”, в которой вместо инструкции If…Then использовать инструкцию Case, обратиться к ней в процедуре “Расчёт_Комиссионных”, запустить эту процедуру на выполнение и отладить в случае неоюходимости.