177
.pdf11
2. Private – процедура будет доступна для других процедур только данного модуля.
После ввода всех необходимых параметров в диалоговое окно Add Procedure необходимо нажать кнопку OK. В окне программного кода
появятся:
а) заголовок процедуры, включающий ключевые слова Public или
Private, ключевое слово, определяющее тип создаваемой процедуры (Sub
или Function), имя процедуры и круглые скобки, между которыми могут быть введены аргументы процедуры;
б) оператор, завершающий процедуру (End Sub или End Function).
Процесс создания процедуры завершается вводом между заголовком процедуры и заканчивающим её оператором программного кода, с помо-
щью которого решается поставленная перед Вами прикладная задача.
Создайте в первом модуле процедуру следующего содержания
(текст сообщения в кавычках может быть произвольным):
Public Sub Приветствие ( )
MsgBox ("Здравствуйте!")
End Sub
Процедура Приветствие является автономной программой, выполняе-
мой независимо от других процедур. Передача данных между процедурами не предусматривается, поэтому список аргументов в круглых скобках от-
сутствует. В результате выполнения процедуры на экран будет выводиться диалоговое окно с текстовым сообщением, указанным в кавычках (для это-
го используется простейший вариант строковой функции MsgBox).
Изменение уровня безопасности
Иногда Ваша процедура, составленная на языке VBA, не будет запус-
каться. Одной из причин этого может быть высокий уровень защиты от макровирусов, установленный в MS Excel. Так как макровирусы представ-
12
ляют собой программный код, хранящийся непосредственно в файле до-
кумента, MS Excel полагает, что Ваша программа является вирусом.
Для понижения уровня безопасности необходимо реализовать следую-
щие действия:
а) на вкладке Разработчик нажать кнопку Безопасность макросов;
б) в диалоговом окне Центр управления безопасностью на вкладке
Параметры макросов установить переключатель в положение Отклю-
чить все макросы с уведомлением;
в) нажать кнопку OK;
г) закрыть рабочую книгу MS Excel и вновь открыть её.
При открытии Вашего файла на экран будет выведено диалоговое окно
Извещение системы безопасности Microsoft Office Excel, в котором для возможности запуска созданных Вами VBA-процедур следует нажать кнопку Включить макросы.
Выполнение программы
Выполнить программу можно несколькими способами.
Способ 1. С помощью диалогового окна Макрос:
а) в окне открытой рабочей книги MS Excel на вкладке Разработчик
нажимаем кнопку Макросы;
б) в появившемся диалоговом окне Макрос выбираем имя нужной процедуры и нажимаем кнопку Выполнить.
Выполните процедуру Приветствие с помощью рассмотрен-
ного способа.
Способ 2. Запуск программы непосредственно из окна редактора
В окне программного кода необходимо установить курсор в любом месте текста нужной процедуры (это легко сделать с помощью открываю-
щегося списка имен имеющихся процедур в правом верхнем углу окна программного кода). Далее возможны следующие варианты выполняемых действий:
13
а) нажимаем кнопку Run Sub/UserForm на стандартной панели инструментов;
б) выполняем команды меню Run → Run Sub/UserForm;
в) нажимаем клавишу <F5>.
Выполните процедуру Приветствие с помощью рассмотрен-
ного способа.
Способ 3. С помощью командной кнопки на рабочем листе:
а) в окне открытой рабочей книги MS Excel нажимаем кнопку Вста-
вить на вкладке Разработчик;
б) после нажатия инструмента Кнопка в группе Элементы управле-
ния формы указываем место расположения командной кнопки на рабочем
листе и определяем её размеры;
в) в появившемся диалоговом окне Назначить макрос объекту вы-
бираем имя процедуры, для запуска которой создаётся командная кнопка
(если Вы не сделаете этого, реализовать данное действие можно в даль-
нейшем, выполнив команду Назначить макрос… в контекстном меню,
вызванном для этой кнопки);
г) нажимаем кнопку OK.
При необходимости на кнопке может быть создана надпись, поясняю-
щая назначение кнопки (по умолчанию формируется надпись Кнопка N,
где N – порядковый номер кнопки). Для этого в любой момент времени следует установить указатель мыши на кнопке, вызвать контекстное меню и выбрать в нем команду Изменить текст.
Создайте на рабочем листе командную кнопку для запуска процедуры Приветствие. Запустите процедуру с её помощью.
Организация ввода исходных данных в программу и вывода полученных результатов
Составим программу для расчёта показателей доходности облигаций.
Вычисления выполняются по следующим формулам:
14
Курс облигации: K = |
P |
×100 , где |
P |
– рыночная цена облигации; N – |
||||
|
||||||||
|
N |
|
|
|
|
|
|
|
номинальная цена облигации. |
|
|
|
|
|
|
||
Текущая доходность облигации: t = |
g |
×100 , где g – |
норма годового до- |
|||||
|
||||||||
|
|
|
|
K |
|
|||
хода (купонная ставка процента). |
|
|
|
|
|
|
||
Полная доходность облигации: |
i = (1 + |
t |
) f -1, где |
f – количество вы- |
||||
|
||||||||
|
|
|
|
|
|
f |
|
плат процентов в году.
Предварительно создадим процедуру для расчёта курса облигаций.
Процедура представляет собой автономную программу, передача значений аргументов между процедурами не планируется, следовательно, список ар-
гументов в круглых скобках отсутствует:
Public Sub Расчёт_курса_облигаций ( )
Dim P As Integer, N As Integer, K As Single
P = InputBox("Введите рыночную цену облигации")
N = InputBox("Введите номинальную цену облигации")
K = P / N * 100
MsgBox ("Курс облигаций равен")
MsgBox K
End Sub
В первой строке текста процедуры с помощью оператора Dim объяв-
ляются все переменные, используемые в программе. Переменные P и N
целого типа, переменная K – вещественного типа (например, 3,5).
Во второй и третьей строках текста процедуры с помощью строковой функции InputBox организуется ввод исходных значений переменных P и
Nв соответствующих диалоговых окнах.
Вчетвёртой строке выполняется расчёт искомой величины курса облигаций.
Впятой строке с помощью строковой функции MsgBox обеспечивается вывод на экран текстового информационного сообщения.
15
В шестой строке функция MsgBox выводит на экран рассчитанное зна-
чение курса облигаций.
Создайте во втором модуле (имя которого соответствует на-
званию Вашей группы) процедуру Расчёт_курса_облигаций.
Для быстрого ввода типов данных Integer и Single можно воспользоваться открывающимся списком ключевых слов
VBA. Запустите созданную процедуру при значениях P = 45, N = 50.
Модифицируем созданную процедуру.
Функция InputBox позволяет вводить кроме текстового сообщения,
отображаемого непосредственно в диалоговом окне, текст, который будет выводиться в виде заголовка окна, и значение переменной, принятое по умолчанию. Например, вторая строка текста процедуры Рас-
чёт_курса_облигаций может иметь вид:
P = InputBox("Введите рыночную цену облигации", "ХГАЭП", 0)
Внесите соответствующие изменения в процедуру и запустите
её. Проанализируйте, как изменился вид диалогового окна.
Число, полученное в результате выполнения процедуры, и поясняющее его информационное сообщение выводятся в разных окнах. Для вывода их в одном окне можно воспользоваться оператором конкатенации &, позво-
ляющим выполнять слияние (объединение) текстовых значений.
Вместо двух строк программы, содержащих строковую функцию
MsgBox, можно записать одну:
MsgBox ("Курс облигаций равен" & K)
Внесите исправления в текст процедуры и запустите её. Об-
ратите внимание, что текст информационного сообщения и
16
число выводятся слитно. Что необходимо сделать, чтобы они разделялись пробелом? Внесите изменения и вновь запустите процедуру.
На основе процедуры Расчёт_курса_облигаций создайте во втором модуле (имя которого соответствует названию Вашей группы) процедуру Расчёт_показателей_доходности_облига-
ций. Для этого скопируйте первую процедуру полностью, за-
тем отредактируйте её:
∙измените название процедуры;
∙объявите новые переменные;
∙предусмотрите ввод дополнительных исходных данных;
∙введите арифметические операторы в соответствии с расчётными формулами, приводимыми ранее (опера-
ция возведения в степень обозначается в программном коде в виде надчерка ^).
Для запуска процедуры создайте командную кнопку на рабо-
чем листе MS Excel, предусмотрите вывод всех результатов в одном диалоговом окне.
Запустите процедуру Расчёт_показателей_доходности_обли-
гаций при конкретных значениях исходных параметров: ры-
ночная цена облигации равна 45; номинальная цена облига-
ции – 50; норма годового дохода – 0,045; количество выплат процентов в год – 4). Имейте в виду, что при вводе в поля диалоговых окон чисел, имеющих целую и дробную части, в
качестве разделителя используется запятая, а не точка.
Проверьте правильность полученных результатов: курс об-
лигации равен 90; текущая доходность облигации – 0,05;
полная доходность облигации – 0,050945.
Если у Вас возникли проблемы при вводе текста процедуры или её вы-
полнении, обратитесь к разделам "Основные правила ввода программного кода" и "Выполнение программы" методических указаний.
17
Значение полной доходности облигации может быть выведено в виде: 5,0945Е-02. Данная запись означает, что число выводится в экспоненци-
альном формате, где 5,0945 – мантисса числа, -02 – порядок числа, т.е. по-
казатель степени числа 10, на которое нужно умножить мантиссу. Следо-
вательно, указанное число можно записать в виде: 5,0945·10-2, т.е. 0,050945.
В созданной Вами процедуре все полученные результаты выводятся в одной строке, так как используется только одна функция MsgBox. Анали-
зировать результаты вычислений в данном виде довольно сложно. Для вы-
вода информации в одном диалоговом окне, но в нескольких строках,
можно воспользоваться функцией Chr. Эта функция с аргументом, равным
13, позволяет организовать дальнейший вывод с начала следующей строки.
Следовательно, вывод результатов, полученных в процедуре Рас-
чёт_показателей_доходности_облигаций, можно выполнить, например,
в виде:
MsgBox ("Курс облигаций равен " & K & Chr(13) _
&"Текущая доходность облигации " & T & Chr(13) _
&"Полная доходность облигации " & I)
Внесите изменения в процедуру Расчёт_показателей_доход-
ности_облигаций в соответствии с представленным образ-
цом. Запустите процедуру и проанализируйте, какие измене-
ния произошли при выводе на экран полученных результатов.
Если в процедуре используется большое количество исходных данных,
нерационально вводить их каждый раз в диалоговых окнах с клавиатуры
(эта проблема особенно актуальна при многократном запуске программы при её тестировании и отладке). В рассматриваемой ситуации рекоменду-
ется предварительно ввести исходные данные в ячейки рабочего листа MS Excel и предусмотреть их чтение при выполнении процедуры. Это можно сделать, например, с помощью свойства Cells, которое может быть записа-
но в виде:
18
Cells (номер строки, номер столбца),
где номера строки и столбца могут быть числовыми константами, пере-
менными, выражениями. Обратите внимание, что адрес конкретной ячейки характеризует не имя столбца, к чему Вы уже привыкли, а его номер, при-
чём вначале указывается номер строки, а затем номер столбца.
Введите исходную информацию для расчётов на рабочий
лист MS Excel по следующему образцу (рисунок 4):
Рисунок 4 – Исходная информация для расчётов, введенная на рабочий лист MS Excel
Строки текста процедуры, с помощью которых вводятся значения ры-
ночной и номинальной цены облигаций, будут выглядеть следующим образом:
P = Cells ( 5 , 3)
N = Cells ( 6 , 3)
Внесите указанные изменения в текст процедуры Рас-
чёт_показателей_доходности_облигаций. Самостоятельно предусмотрите ввод нормы годового дохода и количества выплат процентов в году с рабочего листа MS Excel (рисунок
4). Запустите процедуру и убедитесь, что результаты расчётов не изменились.
19
Свойство Cells можно применять также для вывода полученных ре-
зультатов в ячейки рабочего листа MS Excel:
Cells ( 1, 2 ) = "Курс облигаций"
Cells ( 1, 3 ) = К
Первый оператор выводит в ячейку с адресом B1 текст Курс облига-
ций, второй – в ячейку с адресом C1 значение переменной K.
Отредактируйте текст процедуры Расчёт_показателей_доход-
ности_облигаций так, чтобы результаты расчётов и пояс-
няющие их надписи выводились на рабочий лист MS Excel
аналогично заданному образцу (рисунок 5):
Рисунок 5 – Результаты расчётов, выведенные на рабочий лист MS Excel
Имейте в виду, что, если исходные данные вводятся из ячеек рабочего листа MS Excel и все результаты расчётов также выводятся в ячейки рабо-
чего листа, изменения на экране монитора при запуске процедуры из ре-
дактора Visual Basic можно не увидеть. Для просмотра полученных ре-
зультатов следует перейти в окно рабочей книги MS Excel одним из рас-
смотренных ранее способов. Так как выполнять эту операцию часто нера-
ционально, рекомендуется выводить на экран одновременно окна рабочей книги MS Excel и редактора Visual Basic.
Запустите отредактированную процедуру Расчёт_показа-
телей_доходности_облигаций и убедитесь, что результаты расчётов не изменились. Сохраните результаты Вашей рабо-
ты. Покажите их преподавателю.
20
Библиографический список
1. Гарбер Г. З. Основы программирования на Visual Basic и VBA в Excel 2007 / Г. З. Гарбер. – М. : Солон-Пресс, 2008. – 192 с.
2. Начала программирования на VBA в Excel / сост. О. С. Комова,
С. В. Коломийцева. – Хабаровск : Издательство ДВГУПС, 2008. – 23 с.
3. Разработка пользовательских форм на языке программирования
VBA в среде MS Excel : методические указания / сост. Ю. В. Любицкий. –
Хабаровск : РИЦ ХГАЭП, 2008. – 24 с.
4. Любицкий Ю. В. Решение экономических задач на языке програм-
мирования VBA в среде MS Excel : учеб. пособие / Ю. В. Любицкий. – Ха-
баровск : РИЦ ХГАЭП, 2009. – 72 с.
5.Слепцова Л. Д. Программирование на VBA в Microsoft Office 2010 / Л. Д. Слепцова. – М. : Вильямс, 2010. – 432 с.
6.Уокенбах Дж. Microsoft Excel 2010. Профессиональное програм-
мирование на VBA : пер. с англ. / Дж. Уокенбах. – М. : Диалектика, 2011. – 815 с.
Содержание |
|
Введение............................................................................................................... |
3 |
Общие сведения о структуре построения программ....................................... |
3 |
Основные правила ввода программного кода.................................................. |
5 |
Запуск редактора Visual Basic и завершение работы с ним............................ |
6 |
Создание программы........................................................................................... |
9 |
Изменение уровня безопасности ..................................................................... |
11 |
Выполнение программы................................................................................... |
12 |
Организация ввода исходных данных в программу и вывода полученных |
|
результатов......................................................................................................... |
13 |
Библиографический список.............................................................................. |
20 |