
- •Введение
- •Основные понятия объектно-ориентированного программирования
- •Основные элементы управления в редакторе vba
- •Стандартные приемы программирования в среде vba Введение
- •Отладка программы
- •Основные элементы программного кода в среде vba Описание переменных
- •Константы
- •Операторы присваивания
- •Арифметические выражения
- •Логические выражения
- •Текстовые выражения
- •Линейные программы
- •Оператор перехода
- •Конструкции принятия решений
- •Ветвление по условиям
- •Циклы в программе
- •Массивы
- •Пользовательские процедуры
- •Две основные функции преобразования типов данных
- •Ввод, вывод и генерация исходных данных
- •Приемы работы в среде программирования vba
- •Запуск среды vba
- •Создание функции пользователя
- •Создание макрокоманды (макроса)
- •Создание пользовательской формы
- •Работа с листами книги
- •Лабораторные задания по темам Целочисленное программирование
- •Ввод и вывод данных, оператор присваивания
- •Логические выражения: группа Boolean
- •Условный оператор: группа If
- •Оператор выбора
- •Цикл с параметром: группа For
- •Цикл с условием: группа While
- •Массивы
- •Функции и процедуры
- •Контрольные вопросы
- •Список литературы
- •Содержание
- •420015, Казань, к. Маркса, 68
Две основные функции преобразования типов данных
Строкой называется последовательность символов (текст), взятая в кавычки. Примеры строк:
"Мир всем народам!"
"75"
"100 рублей"
"Х=96.12"
Часто бывает необходимо преобразовать строку в число. Для этого используется функция Val. Она преобразует числовое начало строки в число. Если функция Val этого сделать не может, то она возвращает 0. Аргументом функции Val является строка; а возвращает эта функция число.
Для обратного преобразования (т.е. числа в строку) используется функция Str. Аргументом этой функции является число, переменная какого-либо из числовых типов или арифметическое выражение. Возвращает функция Str строку. Чтобы понять принципы преобразования посмотрите и исполните приведенную ниже программу.
Задание. Путем пошагового выполнения (программу запускаете не командой Run, а выполняете ее пошагово с помощью клавиши F8) проверьте правильность работы следующей программы:
Public Sub StrVal()
Dim strA As String
Dim curB As Currency
strA = "45,77"
curB = Val(strA) 'Результат: curB = 45,77
strA = Str(curB) 'Результат: strA ="45,77"
сurB = Val("4,7 = X") 'Результат: curB = 4,7
curB = Val("X = 4,7") 'Результат: curB = 0
End Sub
Первый комментарий соответствует случаю, когда при пошаговом выполнении программы желтым выделен оператор
strA = Str(curB)
Этот комментарий означает следующее: если указатель мышки подвести к curB, то высветится curB = 45.77 ‑ результат выполнения оператора, находящегося в одной строке с комментарием.
Второй комментарий соответствует случаю, когда желтым выделен оператор сurB = Val("4.7 = X").
Этот комментарий означает: если указатель мышки подвести к strA, то высветится strA = " 45.77" и т.д.
Аналогичный смысл имеют все комментарии в программах, начинающиеся со слова «Результат».
Подчеркнем, что при остановах во время выполнения программы желтым цветом выделяется первый из невыполненных операторов.
Ввод, вывод и генерация исходных данных
В VВA имеется большое количество встроенных процедур, которые отличаются от пользовательских процедур тем, что их описания были запрограммированы разработчиками Visual Ваsic for Application. От пользователя компьютера тексты встроенных процедур скрыты.
К встроенным функциям относится функция, предназначенная для ввода информации (в программу) с помощью стандартных окон Windows.
Примером встроенной подпрограммы является подпрограмма, предназначенная для вывода информации (из программы) в стандартные окна Windows.
Используем встроенные процедуры InputВох и МsgВох в программе расчета длины гипотенузы прямоугольного треугольника по длинам катетов.
В окно кода введем программу
Sub Pythagoras()
Dim a As Single
Dim b As Single
Dim c As Single
Dim s As String
1: s = _
InputBox ("Введите длину 1 катета и нажмите ОК")
2: a = Val(s)
3: s = _
InputBox ("Введите длину 2 катета и нажмите ОК")
4: b = Val(s)
5: c = Sqr(a^2 + b^2)
6: s = Str(c)
7: MsgBox s
End Sub
Запустим программу Pythagoras. Появится окно, предлагающее ввести длину первого катета (рис.12). С помощью клавиатуры введем в текстовое поле, например, значение 400 (без кавычек), и нажмем кнопку ОК.
П
Рис.12. Первое окно для ввода исходных данных
оявится окно, предлагающее ввести длину второго катета (рис.13). Введем, например, значение 300; после этого нажмем кнопку ОК.П
Рис.13. Второе окно для ввода исходных данных
оявится окно, содержащее рассчитанное значение длины гипотенузы (рис.14).Кликнем на кнопке ОК для закрытия окна и завершения выполнения программы Pythagoras.
П
Рис.14. Окно
с результатом расчета
В обращениях к процедурам InputBox и МsgВох фигурирует один параметр (строкового типа), который является обязательным. Однако параметров может быть несколько. Назначение необязательных параметров можно посмотреть в справочной системе, вызываемой нажатием клавиши F1.
В общем виде формат записи функции InputBox имеет следующий вид:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
где: prompt – комментарий к вводимой информации;
title – заголовок окна;
default – значение по умолчанию (оно будет ответом функции при простом нажатии кнопки «Ok»;
xpos, ypos – координаты левого верхнего угла окна;
helpfile, context – имя файла с текстом помощи и соответственно контекстная ссылка на нужную статью помощи.
Все формальные параметры, кроме первого, необязательные и могут быть опущены. Обязательно надо помнить, что выходом функции является строковая переменная, поэтому надо пользоваться дополнительными функциями для перевода данных в нужный формат. Примеры использования данной функции показаны ниже:
получение строковой переменной
Nm=InputBox(“Как Вас зовут ?”);
ввод числа
X=Val(InputBox(“Введите число от 1 до 10, Х=”)).
Иногда надо получить более сложные данные, в этом случае можно пользоваться стандартной процедурой с этим же именем. В записи к описанным выше формальным параметрам добавлен параметр Type, который может иметь следующие значения:
Значение Тип данных
0 формула для ячейки на листе
1 число
2 строковая переменная
4 логическая переменная (True, False)
8 ссылка на указанную ячейку
16 ошибка, например #N/A
64 массив данных
Примеры использования процедуры:
получить на число
X=Application.InputBox("Укажите ячейку", , , , , , , 1)
получаем ссылку на указанную ячейку
Set X=Application.InputBox("Укажите ячейку", , , , , , , 8)
в данном случае мы создаем объект и присваиваем ему данные объекта, с которым мы хотим работать.
Отметим, что в справочной системе подпрограмма МsgВох называется функцией, т.к. ее можно использовать в арифметических выражениях. При этом в программу возвращается значение типа Integer, соответствующее кнопке, на которой кликнул пользователь. Приведем пример использования этого:
В программу Pythagoras введем расчет площади прямоугольного треугольника. Для этого седьмой оператор заменим тремя операторами:
Sub Pythagoras()
Dim a As Single
Dim b As Single
Dim c As Single
Dim s As String
1: s = _
InputBox ("Введите длину 1 катета и нажмите ОК")
2: a = Val(s)
3: s = _
InputBox ("Введите длину 2 катета и нажмите OK")
4: b = Val(s)
5: c = Sqr(a^2 + b^2)
6: s = Str(c)
Dim Ret As Integer
Ret = MsgBox(s, vbYesNo, "Paccчитать площадь?")
If Ret = vbYes Then MsgBox Str(a * b / 2)
End Sub
При выполнении полученной программы изменится содержимое окна с результатом расчета длины гипотенузы (рис.15). При клике на кнопке Уеs появится окно с результатом расчета площади треугольника (рис.16).
В ряде заданий вам надо будет получить набор произвольных данных, с которыми надо выполнить некоторые операции (найти максимальное или минимальное число, отсортировать, найти первое положительное или отрицательное число и т.п.). В этом случае можно пользоваться генератор случайных чисел с помощью функции «Rnd()».
Рис.15. Первое окно с результатом расчета |
Рис.16. Второе окно с результатом расчета |
Функция возвращает случайное число в интервале от 0 до 1 с равномерным распределением. Для получения различных наборов можно строить различные комбинации вычислений с использованием этой функции:
Public Sub InputDates()
Dim X() As Integer
N = InputBox("Введите размер массива(от 2 до 10")
ReDim X(N)
For i = 0 To N
X(i) = Rnd() * 50
Next i
End Sub
Здесь мы генерируем N целых чисел в интервале от 1 до 50 в виде одномерного массива Для генерации, например, чисел в интервале от -25 до 25 надо в строку X(i) = Rnd() * 50 дописать - 25. Чтобы получить вещественные числа достаточно просто описать массив как Double.
Можно записать общую формулу для генерации чисел в заданном диапазоне, которая будет иметь вид X=Xнач +СлЧисло*dX, где Хнач – начало набора, dX – размер диапазона и СлЧисло – случайное число.