Обработка ошибок макроса
В макросах вы сталкиваетесь с двумя типами ошибок. Во-первых, существуют ошибки, которые сделаны в процессе создания макроса. С помощью пошаговой отладки вы можете локализовать их и исправить. Во-вторых, есть ошибки, которые возникают, когда макрос применяется в неверном контексте. Возможно, нужных вам данных нет в текущей записи или форма, которую вы пытаетесь использовать, не открыта. Устранить такого сорта ошибки не удастся с помощью изменения макроса, но можно сообщить программе Access, как поступать с ними.
Обычно Access прерывает выполнение макроса при возникновении ошибки. Если вы хотите применить другой подход, начните ваш макрос с макрокоманды ПриОшибке (OnError). Команда ПриОшибке выбирает в зависимости от значения аргумента Перейти (GoTo) один из трех вариантов обработки ошибок. Задайте его значение равным Сбой (Fail) для реализации стандартного поведения. Задайте в этом аргументе значение Далее (Next), и программа Access пропустит вызывающую сбой макрокоманду и выполнит следующую команду из списка.
Если же задать в аргументе значение Имя макроса (Macro Name), Access будет перемещаться к концу списка, пока не найдет заданный макрос. (С помощью значения Имя макроса вы сообщаете программе, к какому макросу перейти.) Как действует задание имен макросов в аргументе, вы узнаете в разд. "Группы макросов" далее в этой главе.
ПриОшибке (OnError) — необычная макрокоманда, поскольку она воздействует на весь остальной макрос (или, по крайней мере, до тех пор, пока не встретится еще одна макрокоманда ПриОшибке). В длинном сложном макросе макрокоманда ПриОшибке может вызываться несколько раз. Но применяйте варианты обработки ошибок с осторожностью, чтобы не вызвать дополнительные проблемы. Во многих макросах одна макрокоманда зависит от другой, поэтому лучше всего прервать его выполнение при первом же сигнале тревоги.
Макросы и безопасность
В последние годы сотрудники корпорации Microsoft помешаны на безопасности. Они стали более требовательны к программам пакета Office, таким как Access, стремясь нейтрализовать разработчиков злонамеренных вирусов. И хотя эти изменения сделали программу Access безопаснее, они же стали помехой при использовании определенных типов макросов.
Опасные макрокоманды
Программа Access различает два типа макросов: те, которые всегда безвредны, независимо от метода их использования, и те, в которых есть возможность злоупотреблений. Макрокоманда ОткрытьТаблицу безопасна. Она может открыть таблицу, которую вы совсем не хотите видеть, но не может нанести реальный вред. С другой стороны, макрос Печать (PrintOut) не столь невинен. Злоумышленник может отправить на принтер 400 копий ваших данных с кеглем шрифта 80 пунктов. Аналогичным образом УдалитьОбъект (DeleteObject) может привести к реальному хаосу в вашей БД и команда ЗапускПриложе-ния (RunApp), безусловно, опасна — она может запустить новейшее шпионское программное обеспечение или установить компьютерный вирус.
В окне создания макроса в раскрывающемся списке приведены только стопроцентно безвредные макрокоманды. Их называют безопасными макрокомандами. Конечно, существуют серьезные причины применения потенциально опасных макросов. Возможно, вам действительно нужно напечатать отчет, удалить объект или выполнить другую программу. В этом случае вы вынуждены применять потенциально опасные макрокоманды — команды, которым программа Access не доверяет безоговорочно.
Примечание
До тех пор пока вы один управляете вашей БД, вы знаете, что она не содержит стороннего кода и злоупотреблений. В этом случае нет серьезных причин отказываться от применения потенциально опасных макрокоманд. Но если кто-то послал вам БД по электронной почте или вы загрузили БД из Web, возможно, уверенности у вас поубавится. По этой причине программа Access автоматически блокирует небезопасные макросы в БД до тех пор, пока вы не зададите ей что-то другое. Вы узнаете больше об этом механизме в следующем разделе.
Для того чтобы увидеть полный список макрокоманд, включая те, которые программа Access считает опасными, создайте новый макрос (или откройте уже имеющийся) ивыберите
на ленте Работа с макросами | Конструктор → Показать или скрыть → Показать все действия (Macro Tools | Design → Show/Hide → Show All Actions). Теперь раскрывающийся список макрокоманд содержит несколько больше возможных вариантов. Когда во время создания макроса выбирается опасная макрокоманда, Access дает вам знать об этом с помощью предупреждающей пиктограммы (рис. 15.8).
Рис. 15.8. Восклицательный знак в треугольнике выделяет макрокоманды, которые программа Access может отказаться выполнять. В данном примере макрокоманда Печать может вызвать проблемы
Примечание
У программы Access нет представления о том, какие макрокоманды более, а какие менее опасны. Она просто делит их на безопасные и опасные.