Макросы с более сложными условиями

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

Для того чтобы увидеть пример типичных проблем, с которыми вы можете столкнуться, стоит вернуться к макросу StopMissingEmail, который рассматривался в предыдущем раз­деле. Но теперь добавим новый метод. Вместо отмены обновления или вставки ваш макрос будет запрашивать подтверждения заданных вами действий, как показано на рис. 15.24.

Создать сообщение, запрашивающее подтверждение, достаточно легко. Все можно сде­лать с помощью следующего причудливого условия:

MsgBox("Is this really what you want to do?", 4) = 7

 
  Макросы с более сложными условиями - student2.ru

В первой части условия применяется функция MsgBox () для отображения окна сообще­ния. Число 4 сообщает программе Access о том, что окно сообщения должно включать кноп­ки Yes(Да) и No (Нет). Функция MsgBox () возвращает результат 6, если щелкнуть мышью кнопку Yes, и 7, если щелкнуть кнопку No, таким образом, это условие истинно, только если вы щелкнули мышью кнопку, отменяющую изменения.

Рис. 15.24.Теперь вам решать, применять ли это явно противоречивое обновление: подписаться на получение обновлений по электронной почте и не предоставить адрес. (Возможно, вам действительно нужны регулярные электронные сообщения, но тогда придется вернуться позже и добавить корректный адрес электронной почты)

Примечание

Функцию MsgBox () легко перепутать с макрокомандой Сообщение(MsgBox). Они очень тес­но связаны. Но этот пример заставляет работать именно функция MsgBox (), поскольку ее можно запустить из условия. Дополнительную информацию о функции MsgBox (например, ка­кие у нее есть еще варианты для отображения разных наборов кнопок) можно получить, щелк­нув мышью кнопку Справкапрограммы Access и найдя в справке функцию MsgBox.

Итак, вам нужен макрос, который ищет некорректные данные и если находит, отобража­ет на экране окно сообщения. Концептуально этот макрос не слишком сложен. Но если вы начнете создавать нужный макрос, то поймете, что нет удобного способа объединения усло­вий. Найти недопустимые вводимые значения довольно легко, но как гарантировать ото­бражение второго условия (окна сообщения) только при столкновении с первым условием?

Лучший способ решения подобных проблем — применение макрокоманд Остановить-Макроси ЗапускМакроса. ОстановитьМакросзавершает выполнение текущего макроса, что очень удобно для выхода из макроса, если известно, что следующие макрокоманды не применяются. ЗапускМакросазапускает другой макрос, что облегчает выполнение отдель­ной задачи при выполнении конкретного условия.

С помощью команды ОстановитьМакросможно завершить выполнение макроса AskAboutMissingEmail(вопрос по поводу пропущенного электронного адреса). Вот, что следует сделать для этого.

1. Применить условие для проверки корректности данных. Если данные корректны, не нужно предпринимать дополнительных шагов и можно выполнить макрокоманду ОстановитьМакрос.

2. Если макрос все еще выполняется, значит, пропущен электронный адрес. Следующая макрокоманда использует сообщение подтверждения, как условие. Если нажата кнопка No (Нет), выполните команду ОтменитьСобытиедля прекращения редактирования.

На рис. 15.25 показан окончательный макрос.

 
  Макросы с более сложными условиями - student2.ru

Рис. 15.25.Исправленный макрос CatchMissingEmail (выявление пропущенного адреса) нуждается в двух макрокомандах — одна для прекращения процесса, если все хорошо, и вторая для отмены обновления, если нажата кнопка No в окне Подтверждающее сообщение

Глава 16

Наши рекомендации