- •Лабораторный практикум по информатике для студентов очной формы обучения
- •Часть II. Visual Basic for Applications
- • Иркутский государственный технический университет, 2002
- •664074, Иркутск, ул. Лермонтова, 83
- •Введение
- •Создание интерфейса пользователя
- •Элементы управления
- •2. Основные понятия
- •3. Редактор vba
- •4. Работа с переменными, массивами, константами и со свойствами объектов
- •5. Основные инструкции языка Visual Basic
- •Арифметические операции
- •6. Создание пользовательских форм
- •7. Отладка приложений
- •Р ис. 4. Окно контрольного значения
- •8. Лабораторные работы
- •Vba1. Создание простейшего интерфейса. Калькулятор
- •Vba2. Разветвления
- •Vba3. Переменные, процедуры, функции, циклы, массивы
- •Vba4. Сортировка чисел в столбце по возрастанию или убыванию
- •Vba5. Сортировка чисел в столбце по возрастанию или убыванию с созданием формы
- •Vba6. Создание приложения для вычисления многочленов
- •Vba7. Сортировка чисел в столбце по возрастанию или убыванию с созданием формы и панели инструментов с кнопкой
- •9. Самостоятельные и контрольные задания Задание 1
- •Задание 2
- •Задание 3
- •Задание 4
- •Задание 5
- •Разработка приложения “Решение системы линейных уравнений”
- •2. Разработка приложения “Статистический анализ данных”
- •Разработка приложения “Решение треугольника”
- •Разработка приложения “Определение площади произвольной фигуры”
- •Разработка приложений “Графические построения в плоскости xoy”
- •Разработка приложения “Вычисление определенного интеграла”
- •Интегрирование по методу прямоугольников
- •Интегрирование по методу трапеций
- •Метод Симпсона (парабол)
- •Решение нелинейных уравнений
- •Определение границ существования корней
- •Отделение корней
- •Уточнение корней
- •8. Решение систем линейных алгебраических уравнений
- •По коэффициентам системы составляют расширенную матрицу
- •По элементам последней строки матрицы (1.2) можно найти значение
- •9. Приближенные методы решения систем алгебраических уравнений
- •10. Интерполяция функций, заданных таблично
- •11. Допольнительные курсовые работы для студентов горно-геологических специальностей
- •1. Вычисление координат замкнутого теодолитного хода
- •2. Разработка приложения “Прямая геодезическая задача”
- •3. Разработка приложения “Обратная геодезическая задача”
- •4. Разработка приложения “Преобразование географических координат в прямоугольные и прямоугольных в географические”
- •Литература к курсовой работе 4.
5. Основные инструкции языка Visual Basic
Сгруппируем основные инструкции языка Visual Basic по типу операций:
присваивания, в том числе с выполнением математических операций в правой части инструкции;
проверки условий, управления последовательностью исполнения инструкций, организации циклов;
инструкции для работы с файлами.
Последняя группа инструкций в этом кратком пособии не рассматривается. При необходимости с ними можно познакомиться самостоятельно [2, 4].
Инструкция присваивания предписывает найти значение выражения, заданного в ее правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Например, присвоить переменной x значение 2 - это можно записать: x=2; в следующем примере значение переменной x увеличивается на 2: x = x + 2. Рассмотрим математические операции, которые используются в выражениях, стоящих в правой части инструкций присваивания. Среди возможных операций можно выделить арифметические, конкатанации строк, сравнения и логические.
Арифметические операции выполняются над числами, и их результатом являются числа. Они перечислены в таблице 3. При программировании формул необходимо учитывать приоритеты операций и в случае необходимости использовать скобки, как это принято в математике. Поясним таблицу 3. Смена знака имеет место, когда минус ставится перед именем переменной, константы или перед числом. Например: F=CX*(-G^2) ; если CX=3, а G=1.5 , то F = -6.75. Чтобы убедиться в правильности результата, достаточно на листе Excel разместить кнопку CommandButton1 и поле TextBox1, а в событийную процедуру CommandButton1_Click включить инструкции:
Dim I As Integer, F As Single
F = 3 * (-1.5 ^ 2) : I = 3 * (-1.5 ^ 2)
TextBox1.Text = "F=" & Format(F, "0.00") & " I=" & Str(I)
Выйдя из режима конструктора и нажав кнопку, увидим в поле TextBox1 результаты.
Таблица 3.
Арифметические операции
Операция |
Наименование |
Прио-ритет |
Примеры |
Результаты |
||
I – Целое число |
F – действитель- ное число |
I |
F |
|||
^ |
Возведение в степень |
1 |
I = 1.5^2 |
F = 1.5^2 |
2 |
2.25 |
- |
Смена знака |
2 |
I = -6.75 |
F = -6.75 |
-7 |
-6.75 |
* |
Умножение |
3 |
I = 1.3*4 |
F = 1.3*4 |
5 |
5.20 |
/ |
Деление |
3 |
I = 10/3 |
F = 10/3 |
3 |
3.33 |
\ |
Деление нацело |
4 |
I = 10\3 |
F = 10\3 |
3 |
3.00 |
Mod |
Остаток от деления |
5 |
I = 10 Mod 3 |
F = 10 Mod 3 |
1 |
1.00 |
+ |
Сложение |
6 |
I = 12 + 7 |
F = 11.45+7.55 |
19 |
19.00 |
- |
Вычитание |
6 |
I = 7-12 |
F = 7.55-11.45 |
-5 |
-3.90 |
Все результаты примеров легко проверить, подставляя в текст приведенной только что процедуры формулы вычисления I и F. Из этих примеров должно быть понятно, что результат арифметических операций зависит также от типа переменной, которой он присваивается – ведь переменная целого типа не может хранить число с плавающей точкой, и поэтому перед записью в ячейку I результат округляется.
Приведенная выше процедура иллюстрирует и конкатанацию (&) – слияние строк. К строке “F=” прибавляется строка, содержащая отформатированное значение F (с двумя цифрами после десятичной точки). К этой объединенной строке добавляется “ I=” и далее - превращенное в последовательность символов (в строку) число I.
Операции сравнения используют для сравнения чисел, значений переменных, констант, ячеек таблиц. Результат операции сравнения имеет тип Boolean – может принимать значение True или False (Таблица 4).
Таблица 4.
Операции сравнения
Операция |
Наименование |
Пример (R имеет тип Boolean) |
Результат ® |
= |
Равно |
R = (10=5) |
False |
> |
Больше |
R = 10>5 |
True |
< |
Меньше |
R = 10<5 |
False |
>= |
Больше или равно |
R = “a” >= “b” |
False |
<= |
Меньше или равно |
R = “a” <= “b” |
True |
<> |
Не равно |
R = “a” <> “b” |
True |
В логических операциях не только результат, но и операнды имеют тип Boolean.
Таблица 5.
Логические операции
Операция |
Наименование |
And |
Логическое умножение |
Or |
Логическое сложение |
Xor |
Исключающее Or (или) |
Not |
Логическое отрицание |
Поясним назначение таких операций на простом примере. Пусть переменная типа Boolean с именем R должна принимать значение True, если точка с координатами X,Y попадает в прямоугольную область, ограниченную координатами X1,X2 и Y1,Y2. Если точка за пределами прямоугольника, то R=False. Применив логическую операцию AND (И), вычислим значение R:
R = (X>=X1) AND (X<=X2) AND (Y>=Y1) AND (Y<=Y2)
Смысл этой операции в том, что если и первое выражение (X больше или равно X1) истинно, и второе истинно, и третье истинно, и четвертое истинно, то R=True. Если один из операндов логической операции AND представляет собой ложное выражение (утверждение), то и результатом будет False.
Кроме операции AND, к числу часто используемых логических операций относятся OR и NOT. Первая из них дает результат True, если истинно хотя бы одно выражение, являющееся операндом. Операция NOT изменяет результат на противоположный, подобно смене знака в арифметическом выражении. Вычислим R с помощью этих операций:
R = NOT ((X<X1) OR (X>X2) OR (Y<Y1) OR (Y>Y2))
Выражение, стоящее в скобках после операции NOT, истинно (True), если точка или левее, или правее, или ниже, или выше воображаемого прямоугольника, т.е. если точка в него не попала. В этом случае R будет иметь значение False благодаря логическому отрицанию NOT.
Несколько реже используются логические операции XOR (исключающее ИЛИ), EQV (эквивалентность) и IMP (импликация). Первая из них дает результат True, если только одно из выражений-операндов имеет результат True. Результатом операции EQV будет True, если выражения-операнды дают одинаковый результат. Результатом IMP будет True, если выражения-операнды дают разные результаты.
Перейдем теперь ко второй, важнейшей в любом языке программирования, группе инструкций. Это инструкции проверки условий и организации циклов. Все они позволяют управлять последовательностью исполнения инструкций в программе.
Инструкция IF (ЕСЛИ) используется в двух нотациях: в виде простой и блочной структур. Инструкция простой структуры имеет следующую форму записи:
If <Выражение> Then <Инструкция, исполняемая, если выражение-условие истинно>
Конструкция блочной структуры может включать один блок инструкций (<Блок 1>), исполняемых, если выражение 1 истинно, или же еще дополнительные условия, сопровождаемые блоками инструкций:
If <Выражение1> Then
<Блок 1 – исполняется, если выражение 1 истинно>
ElseIf <Выражение2> Then
<Блок 2 – исполняется, если выражение 2 истинно >
ElseIf <Выражение3> Then
<Блок 3 – исполняется, если выражение 3 истинно >
…………………..
Else
<Блок инструкций, исполняемых, если ложны выражения в инструкциях If и ElseIf>
End If
Приведем примеры простой инструкции If:
Вычисление значения функции:
G=
2y+
If y <= 0 Then G = (1 + y^2) / Sqr(1 + y^4) Else G = 2 * y + sin(y)^2 / (2+y)
2) Сообщение, если R – истинно: If R Then MsgBox “Точка попала в прямоугольник”
Теперь пример блочной структуры:
R = False
If X < X1 Then
GoTo 10 ’уже ясно, что точка не попала в прямоугольник
ElseIf X > X2 Then
GoTo 10 ‘управление передается на метку 10
ElseIf Y < Y1 Then
GoTo 10
ElseIf Y > Y2 Then
GoTo 10
Else
R = True
End If
10: MsgBox R ’после метки ставится двоеточие
Блоки ElseIf и (или) Else могут отсутствовать. В любом случае блочная конструкция оканчивается инструкцией End If.
Приведенный пример, кроме блочной конструкции IF, поясняет возможность использования в программе меток и передач управления с помощью инструкции GoTo. Метка не обязательно обозначается числом – можно было написать и N10 или MsgR.
В ситуациях, когда требуется запрограммировать три и более разветвлений в зависимости от значения одной переменной, удобно использовать структуру Select Case:
Select Case <Переменная>
Case <Значение 1> либо Case is <Условие 1>
<Блок 1 – выполняется, если значение переменной равно значению 1
или соответствует условию 1>
Case <Значение 2> либо Case is <Условие 2>
<Блок 2 – выполняется, если значение переменной равно значению 2
или соответствует условию 2>
………………….
End Select
Приведем пример:
Возраст = TextBox1.Value
Select Case Возраст
Case Is < 13
Label1.Caption = "После 22-00 спать !"
Case 16
Label1.Caption = "Пора получать паспорт"
Case Is < 18
Label1.Caption = "Только чай !"
Case Is >= 18
Label1.Caption = "Можно почти все!"
End Select
Теперь рассмотрим организацию циклов. Циклы применяются для многократного повторения одной или нескольких инструкций. Вообще говоря, цикл нетрудно организовать и без специальных инструкций по схеме:
инструкции присваивания начальных значений переменной цикла и другим переменным;
инструкции, исполняемые при очередном значении переменной цикла;
наращивание (изменение) переменной цикла и, возможно, других переменных, изменяемых одновременно с переменной цикла;
проверка переменной цикла на соответствие условию, при котором цикл должен исполняться повторно, и передача управления блоку 2 при выполнении этого условия
(IF <условие> GoTo <метка в начале блока 2>).
Но в языках высокого уровня, и в том числе в VBA, предусмотрены инструкции, позволяющие записывать циклы еще компактнее. Проще всего цикл записывается, если известны начальное, конечное значения переменной цикла и шаг ее изменения. В таких случаях используют инструкцию For…Next , имеющую следующий синтаксис:
For счетчик = начало To конец [Step шаг]
[инструкции]
[Exit For]
[инструкции]
Next [счетчик]
Инструкции For…Next в общем случае содержит следующие элементы:
Счетчик (переменная цикла) - числовая переменная, используемая в качестве счетчика цикла. Эта переменная не может иметь тип Boolean или быть элементом массива.
Начало - начальное значение переменной цикла.
Конец - конечное значение переменной цикла.
Шаг - необязательный аргумент. Значение, на которое изменяется счетчик при каждом выполнении тела цикла. Если это значение не задано, по умолчанию шаг равен 1. Шаг может быть как положительным, так и отрицательным
Инструкции - одна или несколько инструкций между For и Next, которые выполняются указанное число раз.
После выполнения всех инструкций цикла значение шаг добавляется к текущему значению переменной счетчик. После этого инструкции цикла либо выполняются в очередной раз, либо цикл завершается и выполнение продолжается с инструкции, следующей за инструкцией Next.
Пусть в J-ом столбце на листе Excel надо суммировать четные ячейки до строки 20, но только пока не встретится число 7777:
J = 1: S = 0
For I = 2 To 20 Step 2
F = Cells(I, J).Value
If F = 7777 Then Exit For 'Выход из цикла - на инструкцию после Next
S = S + F
Next I
MsgBox "i= " & Str(I-2) & " S=" & Str(S)
После выхода из цикла сообщается номер последней ячейки, значение которой добавлено к S и сама накопленная сумма.
В большинстве случаев циклы этого типа выглядят проще, т.к. обычно не требуется задавать шаг изменения переменной цикла (Step) и не нужно выходить из цикла по дополнительному условию (Exit For). В модуле, приведенном после рис. 2, такие циклы используются в процедурах TabCXCY и TabA. В последней процедуре – вложенный (двойной) цикл.
В тех случаях, когда нет возможности указать начальное и конечное значения переменной цикла, используют циклы типа Do-Loop. Для таких циклов возможны 4 варианта записи:
Do While <условие> <инструкции, исполняемые в цикле> Loop |
Do Until <условие> <инструкции, исполняемые в цикле> Loop |
Do <инструкции, исполняемые в цикле> Loop While <условие> |
Do <инструкции, исполняемые в цикле> Loop Until <условие> |
В число инструкций, исполняемых в цикле, может быть включена инструкция Exit Do, если из цикла надо выйти “досрочно”, например, при выполнении какого-нибудь дополнительного условия. Заметим, что Do While означает Выполнять пока… Do Until означает Выполнять пока не … Другими словами, вместо Do Until можно написать Do While Not. В некоторых случаях эти проверки удобнее ставить в конец цикла (Loop – цикл, дословно – петля). Приведем пример цикла Do While: известно, что сумма S числового ряда 1, 1/2, 1/3, 1/4, …,1/N (где N - целое положительное число) может быть сколь угодно большой (для любого числа M можно найти такое значение N, что S>M). Для решения задачи на лист Excel поместим кнопку (CommandButton1), поле (TextBoxM) для М, поле (TextBoxS) для S, поле (TextBoxN) для N.
Sub CommandButton1_Click()
Dim M as Integer, N as Long, S as Single
S=0: M=TextBoxM.Value: N=0
Do While S<=M
N=N+1
S=S+1/N
Loop
TextBoxS.Value=S
TextBoxN.Value=N
End Sub
Таблица 7.
Часто используемые встроенные функции Visual Basic
Категория функций |
Примеры функций |
Математические
|
ABS( ) - абсолютное значение числа |
RND( ) - случайное число |
|
INT( ) - целая часть числа |
|
SQR( ) - квадратный корень |
|
Тригонометрические функции, логарифмы и др. Для тригонометрических функций обязательный аргумент число представляет значение типа Double или любое допустимое числовое выражение, задающего угол в радианах, для преобразования градусов в радианы следует умножить градусы на pi/180. COS( ) - косинус числа, SIN( ) - синус числа, TAN( ) - тангенс числа, ATN( ) - арктангенс числа. LOG( ) - натуральный логарифм, для вычисления логарифма числа x по основанию n следует разделить натуральный логарифм числа x на натуральный логарифм числа n: Logn(x) = Log(x) / Log(n). EXP( ) - экспонента |
|
|
|
|
|
Категория функций |
Примеры функций |
Строковые |
LCASE( ) – преобразование строки в строчные буквы |
UCASE( ) – преобразование строки в заглавные буквы |
|
LEN( ) - определение длины строки и др. |
|
INSTR( ) – позиция первой встречи одной строки внутри другой
|
|
Даты и времени |
DATE( ) - текущая дата |
TIME( ) - текущее время |
|
NOW( ) - текущая дата и время |
|
DAY( ) - номер дня года и др. |
|
Преобразования типов данных |
CINT( ) - действительного числа в целое (с округлением) |
CSTR( ) - числа в строку символов |
|
CVAR( ) - преобразование в тип данных VARIANT |
|
FORMAT( )- форматирование данных, формирование строк |
|
VAL( ) - преобразование строки символов в число и др. |