Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и КГ_2014.doc
Скачиваний:
65
Добавлен:
26.03.2015
Размер:
4.44 Mб
Скачать

7.2. Создание пользовательской функции листа

Excel позволяет создавать пользовательские функции листа, написанные на языке VBA и реализующие алгоритм пользователя. После создания функции ее имя помещается в категорию функций «Определенные пользователем», которая отображается в окне Мастера функций и воспринимается Excel как встроенная функция. Функция вводится в ячейки Excel по обычным правилам ввода функции.

Для создания пользовательской функции листа нужно на листе редактора VBA выполнить команду Вставка/Модуль (Insert/Module) и написать функцию пользователя в появившемся окне.

Пример 7.2. Создать функцию, которая вычисляет значения sin(x), когда аргумент x представлен в градусах. Текст программы:

Function MySin(x As Single) As Single

'Определение константы

Const pi As Single = 3.14159

Dim y As Single

'Перевод значения x в радианы

y = (x / 180) * pi

MySin = Sin(y)

End Function

Вызов функции будет иметь вид, представленный на рисунке.

Рисунок. Использование пользовательской функции листа

7.3. Процедуры пользователя типа Sub

Общая структура процедуры имеет вид:

Sub <имя процедуры> (<параметр1>, <параметр2>, …)

<программный код для определения процедуры>

End Sub

Часть формальных параметров, описанных в заголовке, может быть использована для ввода исходных данных, а другая часть – для записи в них результатов выполнения программного кода процедуры.

В частном случае процедура может иметь и пустой список параметров, тогда ее заголовок будет выглядеть следующим образом:

Sub <имя процедуры> ( )

Для того чтобы использовать процедуру типа Sub в основной программе, надо записать ее имя в отдельной строке и через пробел после имени указать фактические аргументы, разделив их запятыми.

По существу в предыдущих разделах рассматривались процедуры, но процедуры обработки событий, привязанные к объекту, над которым это событие совершается. Например, запись Sub CommandButton1_Click() означает, что программа выполняется, когда по кнопке CommandButton1 делается щелчок Click.

Пользовательские процедуры могут быть доступны как для отдельной формы, так и для всех форм приложения. Если текст пользовательской процедуры записывается в окне программного кода рабочего листа, то она будет доступна во всех процедурах данного листа, но недоступной в программах других листов. Если же текст пользовательской процедуры записывается в специальном окне модуля (Insert/Module) в окне Редактора Visual Basic, то она будет доступна для процедур всей книги.

Пример 7.3. Рассмотрим пример использования процедуры со списком формальных параметров. Предположим, необходимо вычислить сумму двух различных произведений:

, где .

Для решения такой задачи сначала надо создать процедуру, которая производит вычисление произведений любого количества любых сомножителей из элементов массива:

Sub product(k, z, p)

Dim i As Integer

p = 1

For i = 1 To k

p = p * z(i)

Next

End Sub

Здесь введены следующие имена для процедуры и параметров: product – имя процедуры; k – количество сомножителей в произведении; z – имя массива, произведение элементов которого перемножается; p – параметр, в котором после вычисления будет храниться значение вычисленного произведения.

Эту процедуру можно теперь использовать для решения исходной задачи:

Sub CommandButton1_Click()

Dim f(4) As Single, f1(4) As Single, S As Single

Dim p As Single, p1 As Single, i As Integer

For i = 1 To 4

f(i) = Val(InputBox("Введите f(i)"))

f1(i) = Sin(f(i))

Next

Обращение к процедуре

product 4, f, p1

product 3, f1, p2

S = p1 + p2

MsgBox S

End Sub

Здесь после ввода в память массивов f и f1 дважды вызывается процедура product. При этом первый раз в нее передаются фактические значения для формальных параметров k и z, соответственно равные 4 и f, а результат сохраняется в переменной p1. Во второй раз – значения параметров k и z, равные соответственно 3 и f1, а результат сохраняется в переменной p2.