Общие сведения о структуре построения программ

advertisement
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение высшего
профессионального образования
«Хабаровская государственная академия экономики и права»
Кафедра информационных технологий
Работа с редактором Visual Basic в среде MS Excel
Методические указания по выполнению лабораторных работ для
студентов 1 и 2-го курсов дневной формы обучения
Хабаровск 2007
ББК У.в6
Х12
Работа с редактором Visual Basic в среде MS Excel: метод. указания по выполнению лабораторных работ для студентов 1 и 2-го курсов дневной
формы обучения / сост. О. С. Комова, Ю. В. Любицкий . – Хабаровск :
РИЦ ХГАЭП, 2007. – 20 с.
Рецензент А.И. Кондратьев,
профессор кафедры прикладной
математики ДВ ГУПС, д-р техн.
наук
Утверждено ИБС академии в качестве
методических указаний для студентов
дневной формы обучения
Ольга Семеновна Комова
Юрий Вадимович Любицкий
Работа с редактором Visual Basic в среде MS Excel
Методические указания по выполнению лабораторных работ для
студентов 1 и 2-го курсов дневной формы обучения
Редактор Г.С. Одинцова
Подписано к печати
Бумага писчая. Офсетная печать. Усл.п.л. 1,2.
Формат 60х84/16.
Уч.-изд.л. 0,8.
Тираж 250 экз. Заказ №
680042, г.Хабаровск, ул.Тихоокеанская, 134, ХГАЭП, РИЦ
© Комова О. С., Любицкий Ю. В., 2007
© Хабаровская государственная академия экономики и права, 2007
3
Введение
VBA (Visual Basic for Application) – объектно-ориентированный язык
программирования, встроенный в приложения MS Office (MS Word, MS
Excel, MS PowerPoint и др.) и во множество других отдельных программ и
прикладных пакетов, например AutoCAD и CorelDraw.
Для создания программ на языке VBA используется редактор Visual
Basic (VBE – Visual Basic Editor).
Программы, разработанные в среде приложения MS Office, сохраняются в файле, созданном в процессе работы с приложением (например, в рабочей книге MS Excel), но они не видны пользователю до запуска редактора Visual Basic.
Общие сведения о структуре построения программ
Программа, составленная на языке VBA, не является самостоятельным
элементом, имеющим собственное имя.
Все необходимые для решения поставленной задачи операции реализуются в виде программного кода, представляющего собой последовательность операторов, выполняющих вычисления, ввод исходных данных и
вывод полученных результатов, определение типов переменных и другие
действия.
Группы операторов объединяются в именованные процедуры, каждая
из которых является элементом программы, осуществляющим определенное действие (рис. 1).
Одна или несколько процедур составляют модуль (см. рис. 1). Модули,
как и процедуры, имеют собственные имена.
Модули, а также другие объекты VBA, объединяются в проекты (см.
рис. 1). Каждой рабочей книге MS Excel соответствует только один проект.
Этот проект связан с конкретным файлом и сохраняется вместе с ним. Если при работе с MS Excel одновременно открыть несколько рабочих книг,
будут открыты все связанные с ними проекты.
4
Проект
Модуль 1
Процедура 1
Операторы
Процедура N
Операторы
Модуль 2
Процедура 1
Операторы
Процедура K
Операторы
Модуль M
Процедура 1
Операторы
Процедура L
Операторы
Рис. 1. Обобщенная структура проекта
5
Основные правила ввода программного кода
При вводе программного кода в редакторе Visual Basic следует руководствоваться следующими правилами:
1. Желательно размещать в одной строке только один оператор. Если в
одной строке необходимо расположить несколько операторов, их нужно
разделить двоеточиями:
Х =1 : Z = X + 5 : K = 5
2. Для разбиения длинной строки, не помещающейся на экран, на несколько строк, следует установить курсор в позиции разделения, ввести
символ пробела, а затем символ подчеркивания (этот способ нельзя использовать для фрагмента программного кода, заключенного в кавычки):
If I < 5 Then _
K = 1 Else K = 2
3. Для облегчения чтения программного кода целесообразно его структурировать, добавляя отступы отдельных строк с помощью клавиш <Tab>
или <Пробел>:
For I = 1 To M
If I < 5 Then
K=1
Else
K=2
End If
Next I
4. Программный код желательно дополнять комментариями, поясняющими его назначение. Комментарии можно разместить в отдельной строке
или после операторов, введенных в некоторую строку. Комментарии запи-
6
сываются после символа апострофа, при этом все символы, следующие после апострофа до конца строки, воспринимаются как комментарий:
' Вычисление значения Х
Х = 10 ' Присваивание переменной Х начального значения
Х=Х+Y
Запуск редактора Visual Basic и завершение работы с ним
Для создания новых программ, модулей и процедур, редактирования
программного кода, решения ряда других задач на платформе MS Excel
следует открыть рабочую книгу MS Excel и запустить редактор Visual
Basic.
Запустить редактор можно следующими основными способами:
1. Выполнить команды меню Сервис → Макрос → Редактор Visual
Basic.
2. Нажать комбинацию клавиш <Alt>+<F11>.
Для перехода между открытыми окнами рабочей книги MS Excel и редактора Visual Basic используются обычные технологии ОС Windows:
нажимаются соответствующие кнопки на Панели задач или с помощью
мыши активизируется окно, которое полностью или частично видно на
экране монитора. Кроме того, переход из окна редактора VBA в окно рабочей книги MS Excel можно осуществить одним из способов:
1. Выполнить команды меню View → Microsoft Excel.
2. Нажать комбинацию клавиш <Alt>+<F11>.
Создайте новую рабочую книгу MS Excel. Запустите редактор
Visual Basic любым из указанных способов. Перейдите на рабочий лист MS Excel и вернитесь в окно редактора.
Для завершения работы с редактором Visual Basic следует реализовать
одно из действий:
1. Выполнить команды меню File → Close and Return to Excel.
7
2. Нажать кнопку закрытия окна редактора, расположенную в его правом верхнем углу.
При закрытии MS Excel редактор Visual Basic закрывается
автоматически.
Закройте редактор Visual Basic и вновь откройте его.
Оптимальная конфигурация редактора Visual Basic для новой книги MS
Excel имеет следующий вид (рис. 2):
Рис. 2. Рекомендуемый вид редактора Visual Basic
Окно редактора, как показано на рис. 2, включает заголовок, главное
меню, стандартную панель инструментов и три основных окна:
1. Окно проектов (Project explorer), в котором в иерархическом виде
отображаются все активные проекты, открытые в данный момент времени,
а также входящие в их состав модули, формы и другие объекты. Напом-
8
ним, что каждый проект представляет собой отдельную рабочую книгу MS
Excel (на рис. 2 видно, что открыта одна рабочая книга с названием Книга1, включающая три рабочих листа).
2. Окно свойств (Properties), позволяющее просматривать и изменять
свойства объекта (проекта, модуля, формы и др.), активизированного в
окне проекта.
3. Окно программного кода (Code), предназначенное для ввода, просмотра и редактирования текста программ на языке VBA.
При работе с программным кодом удобно убрать с экрана окна проектов и свойств. Для этого достаточно нажать кнопку закрытия данного окна.
При необходимости окна проектов или свойств, отсутствующие на
экране, можно вывести на экран с помощью команд меню редактора View
→ Project Explorer и View → Properties Window соответственно (или
аналогичных кнопок на стандартной панели инструментов).
Окно программного кода можно вывести на экран с помощью команд
View → Code или кнопки View Code, расположенной на панели инструментов окна проектов.
Закройте и вновь откройте окна проектов, свойств, программного кода разными способами. Сохраните открытую
рабочую книгу MS Excel в файле с именем, соответствующим
Вашей фамилии, в папке Мои документы. Проверьте, изменилось ли имя активного проекта в окне проектов.
Создание программы
Этап 1. Создание нового модуля.
Если открытых проектов несколько, нужно активизировать в окне проектов нужный проект, затем осуществить одно из действий:
1. Выполнить команды главного меню редактора Insert → Module.
2. Нажать кнопку Insert на стандартной панели инструментов и выбрать опцию Module.
3. Вызвать контекстное меню и выполнить команды Insert → Module.
9
По умолчанию новому модулю присваивается имя ModuleN, где N –
порядковый номер модуля. Модуль можно переименовать. Для этого его
следует активизировать в окне проектов, затем в окне свойств в поле свойства Name ввести новое имя модуля.
Создайте два модуля в Вашем проекте. Первому модулю присвойте имя, соответствующее названию Вашего факультета,
второму – Вашей группы. Используя окно проектов, перейдите из одного модуля в другой и вернитесь обратно.
Этап 2. Создание новой процедуры.
Предварительно в окне проектов требуется активизировать модуль, в
котором будет создана новая процедура, и открыть окно программного кода, если оно закрыто. Курсор следует установить в позицию, начиная с которой планируется поместить новую процедуру (это может потребоваться
в ситуациях, когда в модуле уже имеются другие процедуры). Далее следует реализовать одно из действий:
1. Выполнить команды меню Insert → Procedure… .
2. Нажать кнопку Insert на стандартной панели инструментов и выбрать опцию Procedure… .
На экране монитора появится диалоговое окно, предназначенное для
добавления в модуль новой процедуры (рис. 3).
Рис. 3. Диалоговое окно для создания новой процедуры
10
В поле Name вводится имя процедуры (желательно, чтобы оно характеризовало решаемую с ее помощью задачу). Имя процедуры должно соответствовать следующим основным требованиям:
а) в имени могут использоваться заглавные и строчные буквы русского или английского алфавитов, цифры, но первым символом обязательно
должна быть буква;
б) в имени нельзя использовать пробелы и точки (вместо них рекомендуется применять символы подчеркивания).
Группа переключателей Type позволяет определить тип процедуры:
1. Sub – процедура-подпрограмма, которая может иметь несколько
выходных аргументов, вычисляемых в результате ее работы. Эта процедура может выполняться автономно, вызывать другие процедуры или вызываться ими.
2. Function – процедура-функция. В отличие от процедуры Sub процедура-функция может возвращать только одно значение.
3. Property – процедура свойств (в дальнейшем этот тип процедур
рассматриваться и использоваться не будет).
Группа переключателей Scope определяет область действия
процедуры:
1. Public – процедура будет доступна для всех остальных процедур во
всех модулях рабочей книги.
2. Private – процедура будет доступна для других процедур только
данного модуля.
После ввода всех необходимых параметров в диалоговое окно Add
Procedure необходимо нажать кнопку OK. В окне программного кода
появятся:
а) заголовок процедуры, включающий ключевые слова Public или
Private, ключевое слово, определяющее тип создаваемой процедуры (Sub
или Function), имя процедуры и круглые скобки, между которыми могут
быть введены аргументы процедуры;
б) оператор, завершающий процедуру (End Sub или End Function).
11
Процесс создания процедуры завершается вводом между заголовком
процедуры и заканчивающим ее оператором программного кода, с помощью которого решается поставленная перед Вами прикладная задача.
Создайте в первом модуле две процедуры следующего содержания (текст сообщений в кавычках может быть
произвольным):
Public Sub Приветствие ( )
MsgBox ("Здравствуйте!")
End Sub
Public Sub Знакомство ( )
MsgBox ("Меня зовут Олег.")
End Sub
Каждая из созданных процедур является автономной программой, выполняемой независимо от других процедур. Передача данных между процедурами не предусматривается, поэтому список аргументов в круглых
скобках отсутствует. В результате выполнения каждой процедуры на экран
будет выводиться диалоговое окно с текстовым сообщением, указанным в
кавычках (для этого используется простейший вариант строковой функции
MsgBox).
Изменение уровня безопасности
Иногда Ваша процедура, составленная на языке VBA, не будет запускаться. Одной из причин этого может быть высокий уровень защиты от
макровирусов, установленный в MS Excel. Так как макровирусы представляют собой программный код, хранящийся непосредственно в файле, MS
Excel полагает, что Ваша программа является вирусом.
Для понижения уровня безопасности необходимо реализовать следующие действия:
а) выполнить команды меню Сервис → Макрос → Безопасность… ;
12
б) в диалоговом окне Безопасность на вкладке Уровень безопасности установить переключатель, например, в положение «Средняя. Решение
о запуске потенциально опасных макросов принимается пользователем.»;
в) нажать кнопку OK;
г) закрыть рабочую книгу MS Excel и вновь открыть ее.
При открытии Вашего файла на экран может быть выведено диалоговое окно Предупреждение системы безопасности, в котором для возможности запуска созданных Вами VBA-процедур следует нажать кнопку Не
отключать макросы.
Выполнение программы
Выполнить программу можно несколькими способами.
Способ 1. С помощью диалогового окна Макрос:
а) в окне открытой рабочей книги MS Excel выполняем команды меню Сервис → Макрос → Макросы… ;
б) в появившемся диалоговом окне Макрос выбираем имя нужной
процедуры и нажимаем кнопку Выполнить.
Выполните процедуру Приветствие с помощью рассмотренного способа.
Способ 2. Запуск программы непосредственно из окна редактора.
В окне программного кода необходимо установить курсор в любом месте текста нужной процедуры (это легко сделать с помощью открывающегося списка имен имеющихся процедур в правом верхнем углу окна программного кода). Далее возможны следующие варианты выполняемых
действий:
а) нажимаем кнопку Run Sub/UserForm на стандартной панели
инструментов;
б) выполняем команды меню Run → Run Sub/UserForm;
в) нажимаем клавишу <F5>.
13
Выполните процедуру Знакомство с помощью рассмотренного способа.
Способ 3. С помощью командной кнопки на рабочем листе:
а) в окне открытой рабочей книги MS Excel вызываем панель инструментов Формы с помощью команд Вид → Панели инструментов →
Формы;
б) с помощью инструмента Кнопка указываем место расположения
командной кнопки на рабочем листе и определяем ее размеры;
в) в появившемся диалоговом окне Назначить макрос объекту выбираем имя процедуры, для запуска которой создается командная кнопка;
г) нажимаем кнопку OK.
При необходимости на кнопке может быть создана надпись, поясняющая назначение кнопки (по умолчанию формируется надпись Кнопка N,
где N – порядковый номер кнопки). Для этого следует установить указатель мыши на кнопке, вызвать контекстное меню и выбрать в нем команду
Изменить текст.
Создайте на рабочем листе командную кнопку для запуска
процедуры Приветствие. Запустите процедуру с ее помощью.
Организация ввода исходных данных в программу и вывода
полученных результатов
Составим программу для расчета показателей доходности облигаций.
Вычисления выполняются по следующим формулам:
Курс облигации: K 
P
100 , где P – рыночная цена облигации; N –
N
номинальная цена облигации.
Текущая доходность облигации: t 
хода (купонная ставка процента).
g
100 , где g – норма годового доK
14
t
f
Полная доходность облигации: i  (1  ) f  1 , где 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 обеспечивается
вывод на экран текстового информационного сообщения.
В шестой строке функция MsgBox выводит на экран рассчитанное значение курса облигаций.
Создайте во втором модуле (имя которого соответствует
названию
Вашей
группы)
процедуру
Расчет_курса_облигаций. Для быстрого ввода типов данных In-
15
teger и 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.
Если у Вас возникли проблемы при вводе текста процедуры или ее выполнении, обратитесь к разделам "Основные правила ввода программного
кода" и "Выполнение программы" методических указаний.
Значение полной доходности облигации может быть выведено в виде:
5,0945Е-02. Данная запись означает, что число выводится в экспоненциальном формате, где 5,0945 – мантисса числа, -02 – порядок числа, т.е. по-
17
казатель степени числа 10, на которое нужно умножить мантиссу. Следовательно, указанное число можно записать в виде: 5,0945∙10-2, т.е.
0,050945.
В созданной Вами процедуре все полученные результаты выводятся в
одной строке, так как используется только одна функция MsgBox. Анализировать результаты вычислений в данном виде довольно сложно. Для вывода информации в одном диалоговом окне, но в нескольких строках,
можно воспользоваться функцией Chr. Эта функция с аргументом, равным
13, позволяет организовать дальнейший вывод с начала следующей строки.
Следовательно, вывод результатов, полученных в процедуре Расчет_показателей_доходности_облигаций, можно выполнить, например,
в виде:
MsgBox ("Курс облигаций равен " & K & Chr(13) _
& "Текущая доходность облигации " & T & Chr(13) _
& "Полная доходность облигации " & I)
Внесите изменения в процедуру Расчет_показателей_доходности_облигаций в соответствии с представленным образцом. Запустите процедуру и проанализируйте, какие изменения произошли при выводе на экран полученных
результатов.
Если в процедуре используется большое количество исходных данных,
нерационально вводить их каждый раз в диалоговых окнах с клавиатуры
(эта проблема особенно актуальна при многократном запуске программы
при ее тестировании и отладке). В рассматриваемой ситуации рекомендуется предварительно ввести исходные данные в ячейки рабочего листа MS
Excel и предусмотреть их чтение при выполнении процедуры. Это можно
сделать, например, с помощью свойства Cells, которое может быть записано в виде:
Cells (номер строки, номер столбца),
18
где номера строки и столбца могут быть числовыми константами, переменными, выражениями. Обратите внимание, что адрес конкретной ячейки
характеризует не имя столбца, к чему Вы уже привыкли, а его номер, причем вначале указывается номер строки, а затем номер столбца.
Введите исходную информацию для расчетов на рабочий
лист MS Excel по следующему образцу (рис. 4):
Рис. 4. Исходная информация для расчетов, введенная
на рабочий лист MS Excel
Строки текста процедуры, с помощью которых вводятся значения рыночной и номинальной цены облигаций, будут выглядеть следующим
образом:
P = Cells ( 5 , 3)
N = Cells ( 6 , 3)
Внесите указанные изменения в текст процедуры Расчет_показателей_доходности_облигаций.
Самостоятельно
предусмотрите ввод нормы годового дохода и количества
выплат процентов в году с рабочего листа MS Excel (см.
19
рис. 4). Запустите процедуру и убедитесь, что результаты
расчетов не изменились.
В ячейки рабочего листа MS Excel можно выводить результаты расчетов, например, с помощью свойства Range. В простейшем виде это выглядит так:
Range ("B2") = "ХГАЭП"
Range ("F7") = 10
Первый оператор выводит в ячейку с адресом B2 текст ХГАЭП, второй – в ячейку с адресом F7 числовую константу 10.
Отредактируйте текст процедуры Расчет_показателей_доходности_облигаций так, чтобы результаты расчетов и поясняющие их надписи выводились на рабочий лист MS Excel аналогично заданному образцу (рис. 5):
Рис. 5. Результаты расчетов, выведенные на рабочий лист MS Excel
Имейте в виду, что, если исходные данные вводятся из ячеек рабочего
листа MS Excel и все результаты расчетов также выводятся в ячейки рабочего листа, изменений на экране монитора при запуске процедуры из редактора Visual Basic можно не увидеть. Для просмотра полученных результатов придется перейти в окно рабочей книги MS Excel одним из рассмотренных ранее способов. Так как выполнять эту операцию часто нерационально, рекомендуется выводить на экран одновременно окна рабочей
книги MS Excel и редактора Visual Basic.
20
Запустите отредактированную процедуру Расчет_показателей_доходности_облигаций и убедитесь, что результаты
расчетов не изменились. Сохраните результаты Вашей работы. Покажите их преподавателю.
21
Библиографический список
1. Гарнаев А. MS Excel 2002: разработка приложений /
А. Ю. Гарнаев. – СПб. : БХВ, 2004. – 768 с.
2. Гарнаев А. Excel, VBA, Internet в экономике и финансах /
А. Ю. Гарнаев. – СПб. : БХВ, 2005. – 816 с.
3. Гарнаев А. VBA / А. Ю. Гарнаев. – СПб. : БХВ, 2005. – 848 с.
4. Комова О. С. Средства автоматизации решения экономических задач с использованием VBA : учебное пособие / О. С. Комова. – Хабаровск :
РИЦ ХГАЭП, 2004. – 80 с.
5. Слепцова Л. Д. Программирование на VBA. Самоучитель /
Л. Д. Слепцова. – М. : Диалектика, 2004. – 384 с.
6. Уокенбах Дж. Профессиональное программирование на VBA в Excel 2003 : пер. с англ. / Дж. Уокенбах. – М. : Диалектика, 2005. – 800 с.
7. Эйткен П. Интенсивный курс программирования в Excel за выходные : пер. с англ. / П. Эйткен. – М. : Диалектика, 2004. – 432 с.
Содержание
Введение ............................................................................................................... 3
Общие сведения о структуре построения программ ....................................... 3
Основные правила ввода программного кода .................................................. 5
Запуск редактора Visual Basic и завершение работы с ним............................ 6
Создание программы........................................................................................... 8
Изменение уровня безопасности ..................................................................... 11
Выполнение программы ................................................................................... 12
Организация ввода исходных данных в программу и вывода полученных
результатов ......................................................................................................... 13
Библиографический список.............................................................................. 21
Download