[an error occurred while processing this directive] | |||||||||||||||||||||||||
1-й час. Знакомство с Visual Basic for Applications 3-й час. Работа с элементами управления 4-й час. Переменные и константы 6-й час. Логика условных операторов 7-й час. Циклические вычисления 9-й час. Основные объекты Excel 11-й час. Редактор Visual Basic 15-й час. Автоматизация экранных форм 20-й час. Получение внешних данных |
6-й час. Логика условных операторовВ предыдущем часе мы изучили средства, с помощью которых пользователь может вводить данные в приложение и присваивать их переменным. Что с этими данными делать дальше? Можно организовать различные потоки1 выполнения приложения в зависимости от введенной пользователем информации. Такое ветвление выполнения приложения осуществляется с помощью условных (логических) операторов, на которых мы сфокусируем свое внимание в этом часе. В этом часе будут рассмотрены следующие вопросы.
Управление выполнением приложенияПредположим, ваше приложение вывело на экран окно сообщения с двумя кнопками Да и Нет. Допустим даже, вы знаете, что должно делать приложение, если пользователь щелкнет на кнопке Да, и что - когда щелкнет на кнопке Нет. Другими словами, вы понимаете, что при разном выборе пользователя должны выполняться различные последовательности операторов. Чтобы организовать такое ветвление выполнение программы, используются условные операторы. Условные операторы проверяют некоторое логическое условие (которое может принимать значение ИСТИНА или ЛОЖЬ) и в зависимости от результатов проверки выполняют те или иные операторы. В условных операторах используются логические условия для управления потоком выполнения программы. Логические условия позволяют выбрать различные пути выполнения программы в зависимости от значения определенной переменной, информации, введенной пользователем, сделанных установок в диалоговых окнах, и т.п. Применяя логические условия, вы создаете некий тест, а затем, в зависимости от результатов этого теста, приложение выполняет то или иное действие. Для создания логических условий часто используются операторы сравнения. Эти операторы сравнивают, например, значение содержимого некоторой ячейки с заданным значением или значением, возвращаемым какой-либо функции. Выражение, в котором используются операторы сравнения, в зависимости от результата сравнения принимают значения ИСТИНА или ЛОЖЬ. С операторами сравнения вы встречались при работе с некоторыми функциями Excel, такими как функция Если. В табл. 6.1 приведены возможные операторы сравнения. Таблица 6.1. Оператор сравнения
Иногда требуется найти значение выражения, содержащего несколько логических условий. В этом случае применяются логические операторы, соединяющие отдельные условия. В табл. 6.2 описаны логические операторы, которые поддерживает VBA. Примеры использования логических операторов приведены далее в этом часе. Таблица 6.2. Логические операторы
Оператор IfПервым условным оператором, который мы рассмотрим, будет оператор If... Then… Else (Если... Тогда... Иначе). Этот оператор имеет следующий синтаксис:
В этом синтаксисе условие_1 - необходимая часть оператора. Это то основное условие, которое должно проверяться. Если значение этого условия ИСТИНА, выполняются операторы, записанные после слова Then. Если вы хотите проверить второе условие в этом же операторе, добавьте еще одно выражение - ElseIf с последующим условием. VBA первым проверяет условие, записанное после слова If. Если это условие ложно, то проверяется второе условие, приведенное после слова ElseIf. Если это условие истинно, то выполняются операторы_2. В противном случае выполняются операторы, записанные после слова Else. Рассмотрим пример использования оператора If.
Рис. 6.1. Рабочий лист, который послужит основой приложения
Рис. 6.2. Законченный рабочий лист
Рис. 6.3. Щелкните на одной из кнопок в окне сообщения Этот простой пример демонстрирует использование условного оператора. Прежде чем закончить с этим примером, задержите свое внимание на коде созданной процедуры (листинг 6.1). Листинг 6.1. Процедура Отправка
Во второй строке процедуры объявляется переменная iResponse
Эта переменная используется для хранения значения, возвращаемого из окна сообщения:
Возвращаемое окном сообщения значение генерируется кнопками Да и Нет. Значение переменной iResponse проверяется оператором If:
Если значение переменной iResponse равно vbYes, т.е. пользователь щелкнул на кнопке Да, то в ячейку В4 вводится число 10. В противном случае в ячейку В4 вводится ноль. Можно создавать более сложные структуры с операторами If, вкладывая их один в другой. В следующем примере на размер начисляемых комиссионных влияют три фактора. Первый фактор - находится ли товар в продаже. Если товар находится в продаже, то все продавцы получают 1% комиссионных, если еще нет - 2%, Второй фактор - стаж работы продавца в фирме. Третий фактор - отдел, в котором работает продавец, например для продавцов отдела фурнитуры полагается дополнительно 1% комиссионных. Когда один оператор находится внутри другого оператора, такая структура называется вложением операторов.
Рис. 6.4. Рабочий лист, используемый для начисления комиссионных.
Полный код процедуры Комиссионные представлен в листинге 6.2. Листинг 6.2. Процедура Комиссионные
Как обычно, процедура начинается с объявления переменной, в данном случае - переменной sngCommission. Эта переменная используется для вычисления комиссионных. Первое условие - проверка, находится или нет товар в продаже:
Ячейка В2 содержит значение Да, если товар находится в продаже (комиссионные составляют 1%), и значение Нет - в противном случае (комиссионные составляют 2%):
Если товар не находится в продаже, то проверяются следующие условия:
Здесь первый оператор If проверяет стаж работника. Второй оператор If определяет отдел, реализующий товар. Эти операторы вложены в первый оператор If процедуры. В приведенных выше инструкциях по созданию процедуры специально указывалось, чтобы вы проверили, как введено слово Нет в ячейку В2. Чтобы понять, для чего это сделано, выполните следующие действия.
Функция VBA UCase преобразует все символы текстового аргумента в верхний регистр. Благодаря этой функции операторы If перестали быть чувствительны к регистру вводимых данных. (В русской версии Excel (но не в VBA!) эта функция называется ПРОПИСН. - Прим. ред.) Оператор Select CaseПосмотрите на код листинга 6.3: оператор If переводит баллы, полученные студентами при выполнении тестов, в пятибалльную систему оценок. Листинг 6.3. Применение оператора If для случая многих исходов
Этот оператор содержит множество выражений ElseIf и труден для восприятия. В подобных случаях альтернативой оператору If может быть оператор Select Case, который легче для восприятия и лучше приспособлен для работы в ситуациях со многими исходами. Листинг 6.4 содержит код с оператором Select Case, выполняющий ту же задачу, что и код листинга 6.3. Листинг 6.4. Пример оператора Select Case
Вы видите, что этот код более понятен и прост для восприятия. Синтаксис оператора Select Case следующий:
Листинг 6.5 показывает другой пример использования оператора Select Case. Обратите внимание, что когда отдельные значения разделены запятыми, то это эквивалентно применению логического оператора Or (Или). Например, выражение Case “Техас”, “Флорида” интерпретируется оператором Select Case как Техас или Флорида. Листинг 6.5. Еще пример оператора Select Case
Для применения в операторе Select Case операторов сравнения необходимо использовать ключевые слова Is и То. Ключевое слово Is используется тогда, когда необходимо сравнить тестовое_выражение со значениями список_выражений. Ключевое слово Tо служит для задания интервала значений, как это сделано в листинге 6.4. Использование встроенных диалоговых окон ExcelТеперь, когда вы знаете, как управлять потоками выполнения приложений, можно организовать любую реакцию приложения в ответ на выбор, сделанный пользователем в окне сообщения. Например, если в окне сообщения спрашивается, хочет ли пользователь сохранить свою рабочую книгу, то вы должны организовать вывод на экран диалогового окна Сохранение документа. Excel имеет примерно 200 встроенных диалоговых окон. С помощью VBA можно получить доступ ко всем встроенным диалоговым окнам. Синтаксис оператора для открытия встроенных диалоговых окон следующий:
Чтобы задать значение аргумента xlDialogКонстанта, откройте окно просмотра объектов Object Browser и в библиотеке Excel выберите класс XLBuiltInDialog. Вы увидите список всех доступных значений аргумента xlDLslogКонстанта и без труда поймете, что Константа - это просто название диалогового окна. (Естественно, название диалогового окна надо вводить на английском языке и так, как оно показано в окне Object Browser, но это не мешает VBA отображать сами окна в русифицированном виде. - Прим. ред.) Следующие действия приведут к открытию вашим приложением встроенного диалогового окна.
Рис. 6.5. Для вас доступны все диалоговые окна Excel! РезюмеВ этом часе вы изучили два способа управления потоками выполнения программ: С помощью оператора If и оператора Select Case. Вы также узнали, как получить доступ к встроенным диалоговым окнам Excel. Это сохранит ваше время как разработчика приложения (в вашем распоряжении более 200 диалоговых окон!), а пользователю вашего приложения даст для работы хорошо знакомый ему интерфейс. Вопросы и ответыВопрос. Если необходимо организовать различное выполнение программы в зависимости от многочисленных условий, то какой оператор лучше использовать If или Select Case? Ответ. Если эти условия однородные, то рациональнее применить оператор Select Case. Вопрос. Если необходимы диалоговые окна для сохранения документов, организации процесса печати или другого типа, которые можно найти в программе Excel, то нужно ли создавать собственные диалоговые окна с помощью VBA? Ответ. Нет, в своем приложении вы можете использовать все встроенные диалоговые окна Excel. ПрактикумС помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении. Тесты
УпражнениеСоздайте процедуру с именем ТестЩелчок. Эта процедура должна выводить на экран окно сообщения с текстом "Вы хотите продолжать?" и кнопками ОК и Отмена. Примените оператор If, чтобы узнать, на какой кнопке щелкнул пользователь, и выведите окно сообщения, показывающее выбор пользователя. Создайте еще одну процедуру под названием Скидка. Процедура должна вывести на экран окно ввода, предлагающее ввести категорию скидки: 1, 2. 3 или 4. С помощью оператора Select Case организуйте вывод величины скидки в окне сообщения. Категории 1 соответствует скидка 5%, категории 2 - 10%, категории 3 - 15% и категории 4 - 20%. 1 Примечание для программистов и "блюстителей чистоты терминологии": применяемое автором выражение the flow of an application мы переводим как поток выполнения приложения и используем его как синоним выполнения одной из ветвей программы и не претендуем на стандартный термин поток (stream), применяемый в объектно-ориентированных языках программирования (таких как C++). - Прим. ред. |
||||||||||||||||||||||||
[an error occurred while processing this directive] |