52953.fb2 VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 47

VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 47

В предыдущем примере критерии, заданные в операторах Case, были просто цветочками, детскими вопросами типа "Равно ли свойство Туре тому-то и тому-то?" Но с помощью оператора Case вы можете задавать и значительно более сложные критерии.

Это проще всего показать на примере с числами. Предположим, ваш оператор Select Case открывается следующей строкой программного кода:

Select Case intВозрастПациента

В данном случае значением для сравнения будет переменная целого типа intВозрастПациента, представляющая возраст пациента клиники. В следующем списке представлено несколько типов сравнения, которые можно реализовать с помощью операторов Case, и приводятся соответствующие примеры.

* Можно сравнить тестовое значение с некоторым диапазоном значений, как в случае

Case 18 То 35

Messages("ВзрослыйМолодой").Print

* Обратите внимание на ключевое слово То, размещенное между значениями, определяющими границы диапазона. Сам диапазон включает и эти значения, и те, которые находятся между ними.

* Можно сравнивать значения и с помощью операций сравнения, отличных от операции =, как в случае

Case Is > 65

Messages("Взрослый пожилой").Print

Здесь предполагается использовать перед операцией сравнения ключевое слово Is.

На самом деле вы можете Is и не печатать- если вы его пропустите, VBA вставит это ключевое слово за вас.

* Можно в одном операторе Case указать несколько критериев для сравнения, как в случае

Case 0 То 5, 15, Is > 55

Messages("НапоминаниеОПрививке").Print

* Не забудьте разделить критерии для сравнения запятыми. Кстати, оператор Case с несколькими критериями эквивалентен выражению, построенному на основе использования операции Or, - если тестируемое значение удовлетворяет хотя бы один из критериев, следующие за Case операторы будут выполнены.

Повторение с помощью циклов

Управляющие структуры типа "цикл" используются тогда, когда необходимо повторить выполнение некоторого блока программного кода несколько раз. Повторение одного или нескольких операторов является главным средством выполнения многих математических вычислений, извлечения небольших порций данных из больших, применения одних и тех же действий по отношению к каждому из множества элементов некоторой группы.

VBA предлагает три типа структур, организующих циклы.

Тип цикла

Особенности работы

Do. . .Loop

Пока или до тех пор, пока некоторое условие имеет значение True

For. . .Next

Заданное число раз

For Each. .. Next

Для каждого объекта из коллекции объектов

При работе с вложенными циклами помните простое правило: внутренний цикл должен закончиться прежде, чем закончится внешний.

Циклы Do

Все возможные версии оператора Do ... Loop предназначены для повторения заданного блока программного кода неопределенно долго, пока не будет выполнено некоторое условие.

Для того чтобы выяснить, продолжать цикл или нет, оператор Do ... Loop оценивает заданное условное выражение типа условных выражений, используемых для оператора If... Then и описанных выше в разделе "Курс на использование условных выражений".

Случаев, когда структуры Do... Loop полезны, просто не счесть. Вот несколько примеров.

* Отображение сообщения об ошибке снова и снова, пока пользователь не введет подходящую информацию в диалоговое окно.

* Чтение данных из файла на диске, пока не будет обнаружен конец файла.

* Поиск и подсчет числа вхождений некоторой строки символов в более длинной строке.

* Организация холостой работы программы в течение некоторого времени.

* Выполнение некоторых действий по отношению ко всем элементам массива.

* Выполнение (с использованием операторов If... Then ) некоторых действий по отношению ко всем элементам массива или коллекции, удовлетворяющим определенным критериям (массивы и коллекции рассматриваются в главе 13).

Типы операторов Do.. .Loop

В VBA несколько видов циклов Do... Loop, но все они работают очень похоже.

Do. . .Loop Повторяет выполнение блока программного кода, пока некоторый условный оператор внутри цикла не выполнит команду End Do

Do While. . .Loop Начинает и повторяет выполнение блока программного кода, только если заданное условие принимает значение True

Do. . .Loop While Выполняет блок программного кода один раз, а затем повторяет выполнение, пока заданное условие принимает значение True

Do Until. . . Loop Начинает и повторяет выполнение блока программного кода, только если заданное условие принимает значение False

Do. . .Loop Until Выполняет блок программного кода один раз, а затем повторяет выполнение, пока заданное условие принимает значение False

Оператор Do While. . . Loop можно считать прототипом структуры Do. Вот его синтаксис:

Do While условие

(операторы, выполняющиеся, когда условие - True)

Loop

Обнаружив оператор Do While, VBA начинает проверять условие. Если представляющее условие выражение оказывается равным False, VBA игнорирует остальную часть цикла и переходит сразу к операторам программы, следующим за оператором Loop. Если же условие принимает значение True, VBA выполняет операторы в блоке. Достигнув оператора Loop, VBA возвращается опять к оператору Do While, чтобы проверить условие снова.

Как правило, один или несколько операторов в теле цикла могут изменить значение выражения, представляющего условие, поэтому условие может стать равным False. В этом случае VBA прерывает выполнение цикла и, пропустив все его операторы, переходит к выполнению операторов, следующих за оператором Loop. Но если условие все еще равно True, операторы цикла будут выполнены еще раз.

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