Пакеты прикладных программ офисного назначения и программирование – задание 1
В этом посте, мои дорогие читатели, я дам вам несколько советов, как создавать и применять пользовательские функции в Access, а также как передавать разное число аргументов в функцию и использовать массивы. Язык VBA.
Задание
- Создать новую базу данных, а в ней – таблицу с записями приведенной структуры:
Предприятие – название предприятия, Продукция – название продукции, Вып_1, … Вып_6 – данные о выпуске продукции (целые числа) по месяцам полугодия, выраженные в одной и той же единице измерения.
- Заполнить таблицу данными (примерно 15 – 20 записей). Данные выбирать произвольно. Данные должны демонстрировать различные варианты выполнения последующего запроса, для чего их в процессе работы нужно корректировать.
- Создать общий модуль, а в нем – пользовательскую функцию для вычисления -**** Варианты задания ****- из массива числовых переменных. В функции использовать массив и цикл.
- Создать запрос для получения справки следующего вида:
В запросе должно присутствовать обращение к созданной пользовательской функции.
- Выполнить запрос.
Варианты:
Постоянное число параметров – когда функция принимает определенное число, которое прописано в программе. То есть в нашем случае - это шесть значений выпуска. Семь значений, или пять, или все выпуски за год уже будет не посчитать. Думаю, что в этом задании как раз и предусматривается подобный вариант.
Но на всякий случай рассмотрим функцию с переменным числом параметром. Она гораздо удобнее в работе и позволяет расширить возможности программы. В этом случае в функцию передается число аргументов, указанное пользователем, и массив значений. То есть можно посчитать и за квартал, и за полугодие.
Сделаем оба способа, и вы поймете разницу.
Итак, создаем базу данных в Access. Создаем в ней таблицу на восемь полей. Два поля – текстовые, остальные можно сделать целыми. Придумываем предприятия и продукцию, заполняем числовые данные. Я не описываю все подробно. Если уж с вас спрашивают программирование VBA, то создание баз не является трудностью, скорее всего.
Для создания функции переходим в редактор Visual Basic. На вкладке «Создание» в разделе «Другие» из раскрывающегося списка «Макрос» выбираем пункт «Модуль». Открывается редактор кода VBA. Или Alt+F11.
Функцию можно вставить с помощью меню Insert->Procedure или написать прямо в модуле.
Обратите внимание, выбираем именно функцию (Function), а не процедуру, так как нужно получить возвращаемое значение.
Создаем функцию для расчета максимального выпуска (0 вариант).
1 способ
Принимаем шесть аргументов, заполняем массив и ищем максимум.
Текст функции:
Вместо параметров в кавычках нужно выбрать значения выпуска из таблицы «Продукция». Они добавляются после двойного щелчка в разделе «Категории выражений». Не забывайте убирать выражения «Выражение», а то выдаст ошибку. Должно получиться следующее:
Нажимаем ОК, меняем название поля с «Выражение1» на что-нибудь подходящее и запускаем запрос.
Второй способ
Сейчас создадим второй вариант этой функции, назовем его MaxV1.
Нужно иметь в виду, что нумерация элементов в этом массиве начинается с 0, поэтому первый элемент у нас Prod(0), а последний – Prod(arg-2).
Преимущества этого способа - мы не заполняем вручную массив, он передается по ссылке, а также можно рассчитывать не только выпуски за 6 месяцев, но и за другое число. Но при этом при создании запроса необходимо менять первый аргумент функции, зато код функции остается прежним.
Вот как выглядит в данном случае выражение в третьем поле запроса:
Можете выбрать вариант, который вам понятней или больше нравится.
Еще по этому заданию
Пользовательские функции в Access - варианты 1-4
Пользовательские функции в Access - варианты 5-9
Общий список всех сообщений по этой работе
В этом посте, мои дорогие читатели, я дам вам несколько советов, как создавать и применять пользовательские функции в Access, а также как передавать разное число аргументов в функцию и использовать массивы. Язык VBA.
Задание
- Создать новую базу данных, а в ней – таблицу с записями приведенной структуры:
Предприятие – название предприятия, Продукция – название продукции, Вып_1, … Вып_6 – данные о выпуске продукции (целые числа) по месяцам полугодия, выраженные в одной и той же единице измерения.
- Заполнить таблицу данными (примерно 15 – 20 записей). Данные выбирать произвольно. Данные должны демонстрировать различные варианты выполнения последующего запроса, для чего их в процессе работы нужно корректировать.
- Создать общий модуль, а в нем – пользовательскую функцию для вычисления -**** Варианты задания ****- из массива числовых переменных. В функции использовать массив и цикл.
- Создать запрос для получения справки следующего вида:
В запросе должно присутствовать обращение к созданной пользовательской функции.
- Выполнить запрос.
Варианты:
0. Максимальное значение. Запрос - максимальный месячный выпускНам нужно создать функцию, которая принимала бы список аргументов, обрабатывала их и возвращала результат. Список параметров функции может быть постоянным и переменным.
1. Характер изменения значений в массиве переменных (от первого к последнему). Возможные варианты : «Рост», «Падение», «Колебание», «Постоянен». Запрос – Динамика изменения выпуска.
2. Номера минимальных значений. Если их несколько, вернуть строкой через пробел. Запрос – номера месяцев с минимальным выпуском.
3. Номера элементов, содержащих значения больше среднего по массиву. Вернуть строкой. Запрос - Номера месяцев с выпуском больше среднего.
4. Номера элементов, содержащих значения меньше среднего по массиву. Вернуть строкой. Запрос - Номера месяцев с выпуском меньше среднего.
5. Количество элементов, содержащих значения больше среднего по массиву. Запрос - Число месяцев с выпуском больше среднего.
6. Максимальное и минимальное значение из массива элементов (в виде текста). Запрос - Максим-й и миним-й месячный выпуск.
7. Разность максимального и минимального значений из массива числовых переменных. Запрос - Разность максим-го и миним-го выпусков.
8. Количество максимальных значений в массиве (предполагается, что их несколько). Запрос - Число месяцев с наибольшим выпуском.
9. Номера максимальных значений. Запрос - Номера месяцев с максимальным выпуском.
Постоянное число параметров – когда функция принимает определенное число, которое прописано в программе. То есть в нашем случае - это шесть значений выпуска. Семь значений, или пять, или все выпуски за год уже будет не посчитать. Думаю, что в этом задании как раз и предусматривается подобный вариант.
Но на всякий случай рассмотрим функцию с переменным числом параметром. Она гораздо удобнее в работе и позволяет расширить возможности программы. В этом случае в функцию передается число аргументов, указанное пользователем, и массив значений. То есть можно посчитать и за квартал, и за полугодие.
Сделаем оба способа, и вы поймете разницу.
Итак, создаем базу данных в Access. Создаем в ней таблицу на восемь полей. Два поля – текстовые, остальные можно сделать целыми. Придумываем предприятия и продукцию, заполняем числовые данные. Я не описываю все подробно. Если уж с вас спрашивают программирование VBA, то создание баз не является трудностью, скорее всего.
Для создания функции переходим в редактор Visual Basic. На вкладке «Создание» в разделе «Другие» из раскрывающегося списка «Макрос» выбираем пункт «Модуль». Открывается редактор кода VBA. Или Alt+F11.
Функцию можно вставить с помощью меню Insert->Procedure или написать прямо в модуле.
Обратите внимание, выбираем именно функцию (Function), а не процедуру, так как нужно получить возвращаемое значение.
Создаем функцию для расчета максимального выпуска (0 вариант).
1 способ
Принимаем шесть аргументов, заполняем массив и ищем максимум.
Текст функции:
Public Function MaxV(v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer, v6 As Integer) As IntegerТеперь идем в конструктор запросов и создаем там запрос, добавляем в него поля Предприятие и Продукция. На третьем поле нажимаем правую кнопку мыши и выбираем пункт меню «Построить». Открывается Построитель выражений. Слева, в разделе «Элементы выражений» раскрываем список функций и выбираем название нашей базы данных – тест. Появляются доступные модули и созданные пользовательские функции. Выбираем нашу функцию – MaxV, два раза щелкаем на ней.
Dim prod(1 To 6) As Integer 'массив значений выпуска за 6 месяцев
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
'заполняем массив
prod(1) = v1
prod(2) = v2
prod(3) = v3
prod(4) = v4
prod(5) = v5
prod(6) = v6
'определяем максимум - 1 элемент массива
max = prod(1)
For i = 2 To 6
'если элемент массива больше максимума
If prod(i) > max Then
max = prod(i) 'новое значение максимума
End If
Next i
MaxV = max 'возвращаем результат
End Function
Вместо параметров в кавычках нужно выбрать значения выпуска из таблицы «Продукция». Они добавляются после двойного щелчка в разделе «Категории выражений». Не забывайте убирать выражения «Выражение», а то выдаст ошибку. Должно получиться следующее:
Нажимаем ОК, меняем название поля с «Выражение1» на что-нибудь подходящее и запускаем запрос.
Второй способ
Сейчас создадим второй вариант этой функции, назовем его MaxV1.
Public Function MaxV1(ByVal arg As Integer, ParamArray Prod()) As IntegerФункция получает аргументы – число аргументов (в данном случае, это 6 значений выпуска плюс первый аргумент – всего 7) и массив аргументов ParamArray.
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
'определяем максимум - 1 элемент массива
max = Prod(0)
For i = 1 To arg - 2
'если элемент массива больше максимума
If Prod(i) > max Then
max = Prod(i) 'новое значение максимума
End If
Next i
MaxV1 = max 'возвращаем результат
End Function
Нужно иметь в виду, что нумерация элементов в этом массиве начинается с 0, поэтому первый элемент у нас Prod(0), а последний – Prod(arg-2).
Преимущества этого способа - мы не заполняем вручную массив, он передается по ссылке, а также можно рассчитывать не только выпуски за 6 месяцев, но и за другое число. Но при этом при создании запроса необходимо менять первый аргумент функции, зато код функции остается прежним.
Вот как выглядит в данном случае выражение в третьем поле запроса:
Можете выбрать вариант, который вам понятней или больше нравится.
Еще по этому заданию
Пользовательские функции в Access - варианты 1-4
Пользовательские функции в Access - варианты 5-9
Общий список всех сообщений по этой работе
