
Лабораторная работа 1 Реализация программ линейной структуры в среде vba
Цель работы: приобретение навыков по работе в среде Visual Basic for Application (VBA), по использованию данных различных типов, по использованию функций ввода и вывода в VBA.
Задание на лабораторную работу
1. Освоить функции VBA для организации диалога по вводу исходных данных и вывода результатов вычислений.
2. Составить программу ввода значений переменных заданного типа и вывода результатов вычислений в стандартном и заданном формате (в соответствии с вариантом задания).
Порядок выполнения лабораторной работы
1. Получить вариант задания.
2. Изучить функции VBA для подготовки текста программы, компиляции и запуска программы на выполнение. Освоить функции редактора для подготовки текста программы.
3. Изучить структуру VBA, операторы определения переменных стандартных типов и операторы ввода-вывода значений переменных указанных типов.
4. Подготовить текст программы в соответствии со своим вариантом и отладить программу с использованием среды VBA.
5. Устно ответить на контрольные вопросы.
6. Оформить и защитить отчет.
Порядок создания программы
Запуск VBA и сохранение программы. Чтобы запустить VBA необходимо:
последовательно выполнить следующие команды:
Пуск/Все программы/Microsoft Office/ Microsoft Office Excel;
Последовательно выполнить следующие команды:
СервисМакросРедактор Visual Basic (для Office’2003) или нажать клавиши <Alt>+<F11> (для Office’2007 и выше).
В результате выполненных действий откроется окно VBA (рисунок 1). Для вставки модуля необходимо выполнить следующие команды: InsertModule.
1
2
3
4
5
6
Рисунок 1 – Окно VBA
Структура окна VBA. Окно VBA имеет следующую структуру:
Строка главного меню – содержит пункты меню (рисунок 2).
Рисунок 2 – Строка главного меню
Панель инструментов – содержит пиктограммы команд, необходимых для создания и проверки разрабатываемого приложения (рисунок 3).
Рисунок 3 – Панель инструментов
Окно обозревателя (Project Explorer) – отображает структуру файлов форм и модулей текущего проекта, которые могут отображаться в окне редактора (4).
Рисунок 4 – Окно обозревателя (Project Explorer)
Окно свойств (Рroperties) – отображает установки свойств для текущей формы или элемента управления (рисунок 5).
Рисунок 5 – Окно свойств (Рroperties)
Окно редактора кода – отображает текст макроса, его можно редактировать (рисунок 6).
.
Рисунок 6 – Окно редактора кода
Окно отладки (Immediate – окно немедленного исполнения) – позволяет исполнить любую команду VBA или процедуру (рисунок 7), или вывести отладочную информацию, например, набрав ?2*2, получим ответ: 4.
Рисунок 7 – Окно отладки
Если при открытии VBA окно отладки не отображается, его можно включить, выбрав в строке главного меню команды: View / Immediate Window (рисунок 8).
Рисунок 8 – Запуск окна отладки
Сохранение программы. Сохранение программы в VBA имеет некоторые особенности:
при запуске VBA из приложений MS Office, например, из программы Excel, сохранить программу можно с помощью команд: Файл – Сохранить как. По умолчанию книга сохраняется с расширением .xlsx (
), но данное сохранение не поддерживает макросы;
при сохранении необходимо: задать файлу имя и выбрать тип файла:
. Книга сохранится с расширением .xlsm (
). При данном расширении сразу видно, что это не просто книга Excel, а с поддержкой макросов.
Запуск созданной программы. Запустить созданную программу из окна редактора можно нажав клавишу F5, или воспользоваться командой из пункта меню Run. Возможно исполнение программы в режиме отладки меню Debug (нажать клавишу F8). Значение переменной во время отладки можно узнать, подведя указатель мыши к имени переменой в окне редактора.
Структура данных. Под типом данных понимается множество допустимых значений переменных, а также совокупность операций над ними.
Тип данных (Data Type) – это термин, относящийся к определенным видам данных, которые VBA сохраняет и которыми может манипулировать. В таблице 1 обобщены типы данных и показано, какой объем памяти занимает каждый тип, кратко описаны типы данных и дан диапазон значений, которые данный тип может сохранять.
Таблица 1 – Типы данных VBA
Название типа |
Размер, байт |
Описание и диапазон значения |
Byte |
1 |
Целые положительные числа от 0 до 255 |
Integer |
2 |
Целые числа от -32768 до 32767 |
Long |
4 |
Длинные целые числа от -2147483648 до 2147483647 |
Single |
4 |
Вещественные числа обычной точности с плавающей точкой. Отрицательные числа: от -3.402823∙1038 до -1.401298∙10-45. Положительные числа: от 1.401298∙10-45 до 3.402823∙1038 |
Double |
8 |
Вещественные числа двойной точности с плавающей точкой. Отрицательные числа: от -1.79769313486232∙10308 до -4.94065645841247∙10-324. Положительные числа: от 4.94065645841247∙10-324 до 1.79769313486232∙10308 |
Currency |
8 |
Числа, имеющие до 15 цифр до десятичной точки и 4 цифры после нее (денежные единицы). От -922337203685477.5808 до 922337203685477.5807 |
Boolean |
2 |
Для хранения логических значений; может содержать только значения True (Истина) или False (Ложно) |
Date |
8 |
Для хранения комбинации информации о дате и времени. Диапазон дат может быть от 1 января 100 года до 31 декабря 9999 года. Диапазон времени от 00:00:00 до 23:59:59 |
String (строка пе-ременной длины) |
10 байт длина строки |
Используется для хранения текста. Может содержать от 0 символов до (приблизительно) 2 миллиардов символов |
String (строка фиксиро–ванной длины) |
Длина строки (один байт на один символ) |
Используется для хранения текста. Может (содержать от одного до(приблизительно) 65400 символов |
Variant |
16 байт + 1 байт/символ |
Тип Variant может хранить любой другой тип данных. Диапазон для данных типа Variant зависит от фактически сохраняемых данных. В случае текста диапазон соответствует строковому типу; в случае чисел диапазон такой, как у типа Double |
Object |
4 |
Используется для доступа к любому объекту, распознаваемому VBA. Сохраняет адрес объекта в памяти |
Переменные. Переменная – это имя, которое дают области компьютерной памяти, используемой для хранения данных какого-либо типа.
При выборе имени переменной необходимо соблюдать определенные правила:
имя переменной должно начинаться с буквы алфавита;
имена переменных не могут содержать пробелы, точку или любой другой символ, который VBA использует для обозначения математических операций и операций сравнения;
имена переменных не могут превышать 255 символов;
имя переменной должно быть уникальным в рамках его области действия. Оно должно быть уникальным в пределах процедуры или модуля, в которой объявлена эта переменная (по аналогии с камерой хранения: на одном вокзале не может быть двух ячеек с одинаковым номером). Имя переменной не может дублировать зарезервированные ключевые слова VBA;
имена переменных не чувствительны к состоянию регистра, т.е. нет разницы между MyNumber, mynumber, mYnUmBeR.
Тип переменной объявляется в том же операторе, который используется для объявления самой переменной. Можно объявлять типизированную переменную либо при неявном объявлении, либо при явном – с помощью оператора Dim.
Для объявления переменной и ее типа с помощью оператора Dim необходимо добавить ключевое слово As перед именем переменной, а затем ввести имя типа данных для этой переменной.
Константы. Константа (constant) – это значение в программе VBA, которое не меняется.
VBA позволяет создавать именованные константы (named constants). Именованная константа, подобно переменной, имеет заданное ей имя; это имя представляет конкретное неизменяемое значение. Синтаксис для объявления именованных констант имеет вид:
Const nameN = valueN
где nameN – представляет любой допустимый идентификатор;
valueN – любое значение данных: численное, строковое или дата.
Например:
Const Pi = 3.14,
Const Pi2 = 2*Pi {Задание константного выражения}
Правила написания констант:
строковые константы должны быть заключены в двойные кавычки («…»);
пустая строковая константа (называемая нулевой строкой – null string или empty string) обозначается двумя двойными кавычками, между которыми ничего нет ("");
строковая константа должна вся находиться на одной и той же строке;
численные константы должны состоять только из числовых символов от 0 до 9;
численная константа может начинаться со знака « – » и может содержать десятичную точку « . »;
необходимо помещать все константы даты между знаками фунта (#).
Например:
#2-5-97 21:17:34# #February 5, 1997 9:17:34pm# #Маr-31-97# #15 April 1997#
Арифметические операторы VBA. Арифметические операторы VBA приведены в таблице 2.
Таблица 2 – Арифметические операторы VBA
Оператор |
Синтаксис |
Описание |
+ |
A + B |
Сложение: складывает А и В. |
- |
A - B |
Вычитание: вычитает из А В. |
* |
A * B |
Умножение: перемножает А на В. |
/ |
A / B |
Деление: делит А на В. |
\ |
A \ B |
Целочисленное деление: делит А на В, отбрасывая дробную часть. Результат - целое число. |
Mod |
A Mod B |
Деление по модулю: делит А на В, возвращая только остаток операции деления как целое число. |
^ |
A ^ B |
Возведение в степень: возводит А в степень В. |
Математические функции. Математические функции приведены в таблице 3.
Таблица 3 – Математические функции
Функция (аргумент) |
Описание функции |
Abs(N) |
Возвращает абсолютное значение N |
Cos(N) |
Косинус угла N, где N – это угол, измеренный в радианах |
Sin(N) |
Возвращает синус угла; N – это угол, измеренный в радианах |
Tan(N) |
Возвращает тангенс угла; N – угол в радианах |
Atn(N) |
Возвращает арктангенс N как угол в радианах |
Exp(N) |
Возвращает константу е, возведенную в степень N е – это основание натуральных логарифмов и она (приблизительно) равна 2,718282 |
Fix(N) |
Возвращает целую часть N. Fix не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Fix возвращает ближайшее отрицательное целое большее, чем или равное N |
Int(N) |
Возвращает целую часть N. Int не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Int возвращает ближайшее отрицательное целое меньшее, чем или равное |
Log(N) |
N Возвращает натуральный логарифм N |
Rnd(N) |
Возвращает случайное число; аргумент является необязательным. Используйте функцию Rnd только после инициализации VBA-генератора случайных чисел оператором Randomize |
Sgn(N) |
Возвращает знак числа: –1, если N – отрицательное; 1, если N –положительное; 0, если N равно 0 |
Sqr(N) |
Возвращает корень квадратный из N. VBA отображает ошибку исполнения, если N – отрицательное |
Виды информационных сообщений. В VBA существует множество информационных сообщений.
Синтаксические диаграммы. Программирование на любом языке предполагает знание определенных форм записи, которые необходимо соблюдать при написании каждой программы. Правила записи часто бывают, сложны в написании, и поэтому прибегают к различным способам их отображения. Синтаксическая диаграмма – это графическое (условное) представление отдельных объектов языка и строения самой программы. При записи программного кода синтаксическая диаграмма VBA подсказывает, что должно находиться и в какой последовательности (рисунок 9).
Рисунок 9 –Пример синтаксической диаграммы VBA
Синтаксическая диаграмма приведённого примера отображает:
Sub – начало программного кода и начало программы;
End Sub – конец программы;
Пример () – название программы. Название может содержать латинские буквы, русские буквы, цифры, но нельзя ставить: пробелы, специальные символы;
MsgBox – функция выводит на экран диалоговое окно, содержащее сообщение, устанавливая режим ожидания нажатия кнопки пользователем. При написание этого слова в редакторе VBA, внизу подсвечивается подсказка, по которой можно понять, что именно надо написать;
Promt – текст сообщения (в данном случае: Всем привет! Продолжим?). Текс записывается всегда в двойных кавычках;
Buttons As VbMsgBoxStyle... – тип сообщения, который при наборе подсвечивается. Можно просто выбрать и нажать клавишу Tab;
Title – заголовок сообщения, который пишется в верхнем поле (там же где и элемент управления окном Закрыть. В данном случае: Вам сообщение).
Каждое свойство объекта пишется через запятую. Точки в конце нигде не ставятся.
Информационные сообщения. В VBA используются следующие виды информационных сообщений.
Вид сообщения: vbAbortRetryIgnore (рисунки 10, 11).
Рисунок 10 – Программный код
Рисунок 11 – Сообщение
Вид сообщения: vbApplicationModal (рисунки 12, 13).
Рисунок 12 – Программный код
Рисунок 13 – Сообщение
Вид сообщения: vbCritical (рисунки 14, 15).
Рисунок 14 – Программный код
Рисунок 15 – Сообщение
Вид сообщения: vbDefaultButton1 (рисунки 16, 17).
Рисунок 16 – Программный код
Рисунок 17 – Сообщение
Вид сообщения: vbExclamation (рисунки 18, 19).
Рисунок 18 – Программный код
Рисунок 19 – Сообщение
Вид сообщения: vbInformation (рисунки 20, 21).
Рисунок 20 – Программный код
Рисунок 21 – Сообщение
Вид сообщения: vbMsgBoxHelpButton (рисунки 22, 23).
Рисунок 22 – Программный код
Рисунок 23 – Сообщение
Вид сообщения: vbMsgBoxRight (рисунки 24, 25).
Рисунок 24 – Программный код
Рисунок 25 – Сообщение
Вид сообщения: vbMsgBoxRtlReading (рисунки 26, 27).
Рисунок 26 – Программный код
Рисунок 27 – Сообщение
Вид сообщения: vbQuestion (рисунки 28, 29).
Рисунок 28 – Программный код
Рисунок 29 – Сообщение
Вид сообщения: vbRetryCancel (рисунки 30, 31).
Рисунок 30 – Программный код
Рисунок 31 – Сообщение
Вид сообщения: vbSystemModal (рисунки 32, 33).
Рисунок 32 – Программный код
Рисунок 33 – Сообщение
Вид сообщения: vbYesNo (рисунки 34, 35).
Рисунок 34 – Программный код
Рисунок 35 – Сообщение
Вид сообщения: vbYesNoCancel (рисунки 36, 37).
Рисунок 36 – Программный код
Рисунок 37 – Сообщение
Также можно комбинировать сообщения, например: vbQuestion + vbYesNo (рисунки 38, 39).
Рисунок 38 – Программный код
Рисунок 39 – Сообщение
Функции в VBA. Для организации диалога чаще всего используются следующие функции.
Функция InputBox – функция выводит на экран диалоговое окно с кнопкой закрытия, содержащее заданное сообщение, поле ввода, кнопки OK, Cancel:
InputBox(Prompt[,Title] [,Default] [,XPos] [,YPos] [,HelpFile,Context]).
Функция MsgBox – функция выводит на экран диалоговое окно, содержащее сообщение, устанавливая режим ожидания нажатия кнопки пользователем:
MsgBox(Prompt, [Buttons], [Title], [HelpFile], [Context]).
Элементы функции VBA приведены в таблице 4.
Таблица 4 – Элементы функции VBA
Элементы функции |
Описание элемента |
Prompt |
Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина параметра Prompt составляет приблизительно 1024 символа и зависит от ширины используемых символов. Строковое значение Prompt может содержать нескольких физических строк. Для разделения строк допускается использование символа возврата каретки, символа перевода строки или комбинации этих символов |
Buttons |
Необязательно. Числовое выражение, являющееся суммой значений, задающих номер и тип отображаемых кнопок, стиль используемого значка, тип кнопки по умолчанию и признак модальности окна сообщения. Если параметр Buttons опущен, то по умолчанию используется нулевое значение. |
Title |
Необязательный. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения. Максимальное число символов заголовка около 50 |
Default |
Необязательный. Строковое выражение, отображаемое в окне текста как ответ, используемый по умолчанию, если пользователь не введет другую строку. Если этот параметр опущен, окно текста отображается пустым |
XPos |
Необязательный. Числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана (в твипах). Если этот параметр опущен, то диалоговое окно выравнивается по центру экрана по горизонтали |
YPos |
Необязательный. Числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана (в твипах). Если этот параметр опущен, то диалоговое окно помещается по вертикали на расстоянии примерно на одну треть высоты экрана |
HelpFile |
Необязательный. Строковое выражение, определяющее имя файла Справки, содержащего контекстно-зависимую Справку о данном диалоговом окне. Если этот параметр указан, то необходимо задать также и параметр Context |
Context |
Необязательный. Числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, то необходимо задать также и параметр HelpFile |
Ошибки компиляции. Полный перечень ошибок, возможных при отладке программы, представлен в приложении А.
Пример подготовки и выполнения программы. Текст программы показан на рисунке 40, работа с диалоговыми окнами – на рисунках 41, 42.
Рисунок 40 – Текст программы
Рисунок 41 – Ввод значений переменных х и у
Рисунок 42 – Результат работы программы
Структура программы
Структура программы может выглядеть следующим образом:
Sub пример() 1
Dim x As Integer, y As Integer, s As Integer 2
x = InputBox(("введите х"), ["Сумма двух чисел "]) 3
y = InputBox(("введите y"), ["Сумма двух чисел"]) 4
s = x + y 5
MsgBox ("Сумма двух чисел =" & s) 6
End Sub 7
Комментарии к тексту программы:
1 строчка – начало и название программы (Обратите внимание, что скобки ставятся автоматически);
2 строчка – оператор переменных, имя переменной и тип переменной. (Обратите внимание, что для каждой переменной тип нужно задавать отдельно);
3, 4 строчки – ввод чисел и отображение в строке заголовка диалогового окна;
5 строчка – вычисление суммы двух чисел;
6 строчка – вывод результата на экран;
7 строчка – конец программы.
Варианты заданий
Контрольное задание 1. Освоить функции VBA для организации диалога по вводу исходных данных и выводу результатов вычислений. Варианты заданий приведены в таблице 5.
Таблица 5 – Варианты заданий
Вариант |
Задание |
1 |
Найдите среднее арифметическое трёх чисел и умножьте полученное число на 2. |
2 |
Найдите среднее арифметическое двух чисел и умножьте полученное число на 3. |
3 |
Сложите два любых числа и полученную сумму умножьте на 3. |
4 |
Найдите произведение трёх чисел и умножьте полученное число на 2. |
5 |
Разность двух чисел возведите в третью степень. |
6 |
Частное двух чисел возведите в пятую степень. |
7 |
Найдите среднее арифметическое трёх чисел и умножьте полученное число на 4. |
8 |
Найдите среднее арифметическое двух чисел и умножьте полученное число на 5. |
9 |
Сложите два любых числа и полученную сумму умножьте на 4. |
10 |
Найдите произведение трёх чисел и умножьте полученное число на 7. |
11 |
Разность двух чисел возведите в четвёртую степень. |
12 |
Частное двух чисел возведите в шестую степень. |
13 |
Найдите среднее арифметическое трёх чисел и умножьте полученное число на 9. |
14 |
Найдите среднее арифметическое двух чисел и умножьте полученное число на 9. |
15 |
Сложите два любых числа и полученную сумму умножьте на 9. |
16 |
Найдите произведение трёх чисел и умножьте полученное число на 8. |
17 |
Разность двух чисел возведите в седьмую степень. |
18 |
Частное двух чисел возведите в третью степень. |
19 |
Найдите среднее арифметическое трёх чисел и умножьте полученное число на 1,5. |
20 |
Сложите два любых числа и полученную сумму умножьте на 2,5. |
Контрольное задание 2. Разработать в VBA программу для вычисления значения функции. Варианты заданий приведены в таблице 6.
Таблица 6 – Варианты заданий
Номер варианта |
Тип данных |
Функция |
1 |
Integer |
Y=|A|*(X+1)2 |
2 |
Integer |
Y=|A|-B2 |
3 |
Integer |
Y=B2+|A| |
4 |
Integer |
Y=|A|-|B| |
5 |
Integer |
Y=(A+B)2 |
6 |
Real |
Y=|A+B| |
7 |
Real |
Y=2 * A * |B| |
8 |
Real |
Y=A*(|X|-1)2 |
9 |
Real |
Y=|A|-(B+1)2 |
10 |
Real |
Y=B2+(|A|-1) |
11 |
Integer |
Y=|A|-|B|+5 |
12 |
Integer |
Y=(A+B-1)2 |
13 |
Integer |
Y=|A+B|-2*A |
14 |
Integer |
Y=2 * |A| * (B-1) |
15 |
Integer |
Y=B2+(|A|-B) |
16 |
Integer |
Y=|A+B| |
17 |
Integer |
Y=2 * A * |B| |
18 |
Integer |
Y=A*(|X|-1)2 |
19 |
Integer |
Y=|A|-(B+1)2 |
20 |
Integer |
Y=B2+(|A|-1) |
Контрольные вопросы
Какова структура программы в VBA?
Как объявляются переменные в VBA?
Назовите правила описания переменных.
Чем функция InputBox отличается от MsgBox?
Как выполнить компиляцию программы?
Содержание отчёта
Отчёт должен иметь следующие разделы:
Титульный лист.
Цель лабораторной работы.
Состав и структура данных.
Описание программы:
Блок-схема (выполненная в Visio);
Текст программы;
Результат работы программы.
Ответы на контрольные вопросы.
Вывод по лабораторной работе.