№ | Фрагмент текста программы | Результат |
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
[ блок_операторов_иначе ]]