Макросы с более сложными условиями
Поскольку макросы с условиями получаются длиннее и сложнее, иногда ими труднее управлять. У вас может быть несколько одновременно действующих условий, каждое из которых требует выполнения собственной макрокоманды. Если некоторые из условий истинны, возможно, вы захотите пропустить проверку всех остальных условий или полностью остановить выполнение макроса.
Для того чтобы увидеть пример типичных проблем, с которыми вы можете столкнуться, стоит вернуться к макросу StopMissingEmail, который рассматривался в предыдущем разделе. Но теперь добавим новый метод. Вместо отмены обновления или вставки ваш макрос будет запрашивать подтверждения заданных вами действий, как показано на рис. 15.24.
Создать сообщение, запрашивающее подтверждение, достаточно легко. Все можно сделать с помощью следующего причудливого условия:
MsgBox("Is this really what you want to do?", 4) = 7
В первой части условия применяется функция MsgBox () для отображения окна сообщения. Число 4 сообщает программе Access о том, что окно сообщения должно включать кнопки Yes(Да) и No (Нет). Функция MsgBox () возвращает результат 6, если щелкнуть мышью кнопку Yes, и 7, если щелкнуть кнопку No, таким образом, это условие истинно, только если вы щелкнули мышью кнопку, отменяющую изменения.
Рис. 15.24.Теперь вам решать, применять ли это явно противоречивое обновление: подписаться на получение обновлений по электронной почте и не предоставить адрес. (Возможно, вам действительно нужны регулярные электронные сообщения, но тогда придется вернуться позже и добавить корректный адрес электронной почты)
Примечание
Функцию MsgBox () легко перепутать с макрокомандой Сообщение(MsgBox). Они очень тесно связаны. Но этот пример заставляет работать именно функция MsgBox (), поскольку ее можно запустить из условия. Дополнительную информацию о функции MsgBox (например, какие у нее есть еще варианты для отображения разных наборов кнопок) можно получить, щелкнув мышью кнопку Справкапрограммы Access и найдя в справке функцию MsgBox.
Итак, вам нужен макрос, который ищет некорректные данные и если находит, отображает на экране окно сообщения. Концептуально этот макрос не слишком сложен. Но если вы начнете создавать нужный макрос, то поймете, что нет удобного способа объединения условий. Найти недопустимые вводимые значения довольно легко, но как гарантировать отображение второго условия (окна сообщения) только при столкновении с первым условием?
Лучший способ решения подобных проблем — применение макрокоманд Остановить-Макроси ЗапускМакроса. ОстановитьМакросзавершает выполнение текущего макроса, что очень удобно для выхода из макроса, если известно, что следующие макрокоманды не применяются. ЗапускМакросазапускает другой макрос, что облегчает выполнение отдельной задачи при выполнении конкретного условия.
С помощью команды ОстановитьМакросможно завершить выполнение макроса AskAboutMissingEmail(вопрос по поводу пропущенного электронного адреса). Вот, что следует сделать для этого.
1. Применить условие для проверки корректности данных. Если данные корректны, не нужно предпринимать дополнительных шагов и можно выполнить макрокоманду ОстановитьМакрос.
2. Если макрос все еще выполняется, значит, пропущен электронный адрес. Следующая макрокоманда использует сообщение подтверждения, как условие. Если нажата кнопка No (Нет), выполните команду ОтменитьСобытиедля прекращения редактирования.
На рис. 15.25 показан окончательный макрос.
Рис. 15.25.Исправленный макрос CatchMissingEmail (выявление пропущенного адреса) нуждается в двух макрокомандах — одна для прекращения процесса, если все хорошо, и вторая для отмены обновления, если нажата кнопка No в окне Подтверждающее сообщение
Глава 16