Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по VBA.doc
Скачиваний:
108
Добавлен:
26.08.2019
Размер:
1.04 Mб
Скачать

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:

  1. Вычисление значения функции:

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

Теперь рассмотрим организацию циклов. Циклы применяются для многократного повторения одной или нескольких инструкций. Вообще говоря, цикл нетрудно организовать и без специальных инструкций по схеме:

  1. инструкции присваивания начальных значений переменной цикла и другим переменным;

  2. инструкции, исполняемые при очередном значении переменной цикла;

  3. наращивание (изменение) переменной цикла и, возможно, других переменных, изменяемых одновременно с переменной цикла;

  4. проверка переменной цикла на соответствие условию, при котором цикл должен исполняться повторно, и передача управления блоку 2 при выполнении этого условия

(IF <условие> GoTo <метка в начале блока 2>).

Но в языках высокого уровня, и в том числе в VBA, предусмотрены инструкции, позволяющие записывать циклы еще компактнее. Проще всего цикл записывается, если известны начальное, конечное значения переменной цикла и шаг ее изменения. В таких случаях используют инструкцию ForNext , имеющую следующий синтаксис:

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 варианта записи:

  1. условие True в начале цикла

Do While <условие>

<инструкции, исполняемые в цикле>

Loop

  1. условие False в начале цикла

Do Until <условие>

<инструкции, исполняемые в цикле>

Loop

  1. условие True в конце цикла

Do

<инструкции, исполняемые в цикле>

Loop While <условие>

  1. условие False в конце цикла

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( ) - преобразование строки символов в число и др.