Примеры использования оператора присваивания
№ | Фрагмент текста программы | Результат |
Sub q() Const pi = 3.14 Dim a%, b!, c#, d As Boolean Dim e As Date, f$ a = 1 / 3 b = 1 / 3 c = 1 / 3 d = 1 / 3 e = 1 / 3 f = a & vbCr & b & vbCr & c & _ vbCr & d & vbCr & e & vbCr & pi MsgBox f End Sub | ||
a=1 : b=2 : a=b : b=a | a=2 b=2 | |
a=1 : b=2 : a=a+b : b=a*b | a=3 b=6 | |
a=1 : b=2 : a=a+b : b=a : a=a=a | a=-1(True) b=3 | |
c=a : a=b : b=c | a и b меняются значениями | |
6 * | a=a+b : b=a-b : a=a-b | a и b меняются значениями |
7 * | a=y*2 : y=y/x : x=x*x : x=x+y+a | x=x*x+y/x+y*2 |
Более подробных комментариев заслуживает пример 1 из таблицы 21. Оператор присваивания здесь задаёт значения переменных a, b, c, d, e, f. Оператор Sub … End Sub задаёт описание подпрограммы-процедуры с именем q, внедрённой в данный электронный документ и запускаемой нажатием следующей кнопки .
Примечание: предполагается, что параметры безопасности Microsoft Office Word разрешают запуск макросов (активного содержимого). Более подробные сведения о выполнении программ в среде VBA можно получить, изучая справочную систему, соответствующую учебную литературу [14], а также выполняя задания лабораторного практикума и делая соответствующие выводы [19, 23].
Оператор Const задаёт значение константы pi, а оператор Dim объявляет переменные, причём все они относятся к разным типам (см. табл. 17). Именно поэтому присваивание разным переменным значения одного и того же выражения приводит к получению совершенно различных результатов.
В операторе, задающем значение строковой переменной f, использованы предопределённые константы vbCr, обозначающие непечатаемый символ возврата каретки – переход на новую строку. Поэтому на экране значение переменной f отображается не в одну, а в несколько строк. Символ подчёркивания в этом же выражении играет аналогичную роль в синтаксисе программы, позволяя продолжить запись текущего оператора со следующей строки.
В качестве оператора, отображающего на экране в окне сообщения значение переменной f, выступает функция MsgBox.
Достаточно простые примеры 2 и 3 позволяют лучше понять работу оператора присваивания и заодно закрепить понятие переменной. Особенность примера 4 заключается в последнем операторе a=a=a. Здесь второй знак равенства означает не присваивание, а сравнение, результатом которого в данном случае будет логическое значение «Истина», которому соответствует число -1.
В примерах 5 и 6 выполняется обмен значениями двух переменных а и b, причём в примере 5 это делается с помощью третьей переменной с, а в примере 6* демонстрируется один из способов, не требующих использования дополнительной переменной. Последовательность операторов присваивания в примере 7* эквивалентна вычислению выражения, содержащего несколько операций.
11.2 Условный оператор IF … THEN
Далеко не всякий алгоритм можно описать только линейными структурами. Условный оператор позволяет реализовать алгоритмическую структуру «Ветвление», показанную на рисунке 11.1, и выполнить нужный вариант вычислений из двух (или более) предусмотренных в зависимости от выполнения некоторых условий (логических выражений).
Рис. 11.1. Базовая алгоритмическая структура «Ветвление»
Для реализации структуры «Ветвление» (Если – То – Иначе) и её частного случая «обход» (Если – То) в VBA используется так называемый строчный вид оператора IF … THEN. Его синтаксис имеет следующий вид:
IFусловие THENоператоры_А [ELSEоператоры_В]
В качестве условия (англ. condition) может выступать любое выражение, значение которого расценивается как истина (не ноль) или ложь (ноль). А в качестве операторов А и В – один или несколько, разделённых двоеточиями, операторов. Если опустить часть оператора в квадратных скобках, то будет реализована структура «обход». Приведём пример использования оператора IF … THEN, в котором можно обойтись без комментариев:
IFрейтинг < 60 THENитог = «незачёт» ELSEитог = «зачёт»
Блочный вид оператора IF … THEN позволяет, кроме того, реализовать более сложное вложенное ветвление. Синтаксис этого оператора имеет следующий вид:
IF условие_1 THEN
[блок_операторов_1]
[ELSEIF условие_2 THEN
[блок_операторов_2]]
…
[ELSE
[блок_операторов_иначе]]
END IF
В отличие от строчной, блочная форма оператораIF … THEN допускает использование нескольких условий, после каждого из которых следует (необязательный) блок операторов, выполняющийся только в случае истинности соответствующего выражения. Следующее условие проверяется только в случае ложности предыдущего. В случае же истинности одного из условий (и последующего выполнения соответствующего блока операторов) никакие дальнейшие условия блочного оператора IF … THEN уже не проверяются, а выполнение программы продолжается с оператора, следующего за ключевым словом END IF.
Исчерпывающее рассмотрение базовой управляющей алгоритмической структуры «Ветвление» даётся в практикуме [20]. Мы же ограничимся приведением ещё одного примера, комментарии к которому могут быть составлены заинтересованным читателем самостоятельно:
IF рейтинг < 55 THEN
итог = «неудовлетворительно»
ELSEIF рейтинг < 70 THEN
итог = «удовлетворительно»
ELSEIF рейтинг < 85 THEN
итог = «хорошо»
ELSE
итог = «отлично»
END IF
11.3 Оператор выбора варианта *
Разновидность структуры «ветвление» – выбор одного из нескольких блоков – показана на рисунке 11.2. Реализуется эта структура оператором выбора варианта SELECT CASE … END SELECT. Логика работы оператора выбора очень похожа на блочную форму оператораIF … THEN. Также выполняется только один из нескольких блоков операторов (вычислительных процессов). Отличие заключается в том, что все условия выбора связаны с проверкой значения одного общего тест-выражения, а в условиях оператораIF … THEN могут проверяться совершенно независимые значения.
Рис. 11.2. Структура «выбор»
Приведём синтаксис оператора SELECT CASE … END SELECT, который выполняет один из нескольких блоков операторов (на рис. 11.2 – процессов) в зависимости от значения тест-выражения:
SELECT CASE тест_выражение
CASE список_выражений_1
[блок_операторов_1]
[CASE список_выражений_2
[блок_операторов_2]]
…
[CASE ELSE
[блок_операторов_иначе]]