
Access 2007
.pdf
не сообщите программе Access, какую именно таблицу хотите открыть. Эти дополнительные сведения и называют аргументами.
У макрокоманды ОткрытьТаблицу (ОреnТаble) три аргумента.
oИмя таблицы ссылается на таблицу, которую вы хотите открыть. Его можно выбрать из раскрывающегося списка таблиц. В данном примере можно использовать любую непустую таблицу.
oРежим позволяет выбрать применяемый режим представления. Можно выбрать обычный режим Таблица для ввода информации, Конструктор для изменения структуры таблицы, Просмотр для подготовки данных к печати или Сводную таблицу и Сводную диаграмму для работы с итогами сводной таблицы. В данном примере выберите режим Таблица. (Конечно, когда таблица открыта, можно переключиться в другой режим представления, щелкнув правой кнопкой мыши заголовок или кнопку режима на ленте.)
oРежим данных определяет, какой тип изменений разрешен. Можно использовать стандартный вариант Изменение (Edit) для разрешения любых изменений, Только чтение (Read Only) для запрета каких бы то ни было изменений или Добавление (Add) для разрешения только добавления записей. В данном примере выберите
Только чтение.
Примечание
Вы уже видели, что у пользовательского макроса гораздо больше функциональных возможностей, чем у мастера построения макрокоманды (Command Builder wizard). Когда применяется мастер, можно открывать формы и отчеты, но не обычные таблицы, и нет средств управления режимом представления или разрешенными видами изменений. Макрос не сталкивается с подобными ограничениями.
4.При желании введите в столбец Примечание дополнительную информацию, которая напомнит назначение макрокоманды.
Не используйте столбец Примечание для объяснения очевидного (как, например, "Открывает таблицу Products"). В этом столбце следует объяснять важность шагов в наиболее сложных операциях. Сейчас вам не нужны комментарии, но позже, когда вы создадите группы макросов и будете применять условия, вы поймете полезность комментариев.
5.Перейдите на следующую строку и повторите шаги 2—4 для вставки другой макрокоманды.
Вы можете вставить в макрос практически неограниченное число макрокоманд. (При наличии маленьких буферов в программе Access макрос может содержать до 999 макрокоманд.) Каждая команда занимает отдельную строку, и программа Access выполняет их по порядку, перемещаясь сверху вниз.
Для завершения данного примера добавьте макрокоманду НаЗапись (GoToRecord). Это действие обеспечивает получение нужной записи в таблице, которую вы только что открыли.
При использовании аргументов следует указывать корректный объект (задайте Таблица в качестве Типа объекта и имя таблицы, которую вы выбрали в пункте 3, в качестве Имени объекта). Затем можно использовать аргументы Запись (Record) и Смещение (Offset) для точного задания той позиции, в которую вы хотите перейти. С помощью
501

аргумента Запись можно выбрать переход к предыдущей строке (Предыдущая (Previous)), к следующей строке (Следующая (Next)), к заполнителю новой строки в конце таблицы (Новая (New)), к заданной строке (Конкретная (Go To)), к первой строке (Первая (First)) или, как в данном примере, к последней строке (Последняя (Last)). Если выбрать Конкретная, можно использовать аргумент Смещение для указания точной позиции, например, если задать Смещение 5, обеспечивается переход к 5-й записи.
Примечание
Некоторые макрокоманды зависят от действия предшествующих макрокоманд. Отличный пример — команда НаЗапись (GoToRecord). В ней предполагается, что вы открыли таблицу, форму или запрос, содержащие запись, которую хотите отобразить. Если применить команду НаЗапись без предварительного открытия соответствующего объекта, вы получите сообщение об ошибке во время выполнения макроса.
И просто для смеха, почему бы не вставить еще одну макрокоманду? Испытайте команду Сообщение (MsgBox), отображающую выбранное вами сообщение в небольшом информационном окне. Задается сообщение в аргументе Сообщение (Message). Задайте, например, такой текст: "Ваш первый макрос только что сделал свое дело". Можно также добавить необязательный заголовок (с помощью аргумента Заголовок (Title)), предупреждающий звуковой сигнал (задав в аргументе Сигнал (Веер) значение Да) и встроенную пиктограмму (с помощью аргумента Тип (Туре)).
Подсказка
В любой момент можно изменить порядок выполнения макрокоманд. Просто щелкните кнопкой мыши поле слева от элемента, который хотите переместить; этот щелчок выделяет макрокоманду. Затем перетащите команду с помощью мыши в новое место. Программа Access автоматически раздвинет другие макрокоманды.
6. Нажмите комбинацию клавиш <Ctrl>+<S> для сохранения макроса и задайте ему имя.
В этом примере можно назвать макрос ShowTheLastProduct (отображение последнего товара). Если вы не сохраните макрос, программа Access вежливо предложит вам сделать это во время закрытия окна макроса или первого запуска вашего макроса.
Макрос отображается в области переходов. Если ваши объекты сгруппированы по типу объекта, то вы заметите, что у макроса свой тип. Если применяется вариант группировки Таблицы и связанные представления (Tables and Related Views), программа Access вставит макрос в дополнительную группу в конце списка, названную Несвязанные объекты (Unrelated Objects).
Примечание
Когда используется мастер построителя макрокоманды, также создается макрос. Но этот макрос не выводится в области переходов, поскольку он спрятан в конкретной форме. Такой тип макроса называется внедренным, поскольку он встроен внутрь формы.
Запуск макроса
Теперь, когда макрос завершен, можно его испытать. Программа Access предоставляет четыре способа запуска макроса.
■Можно запустить его явно. Найдите нужный макрос в области переходов и дважды щелкните его кнопкой мыши. Этот вариант действует, если макрос еще не открыт. Если
502

же макрос открыт, выберите на ленте Работа с макросами | Конструктор → Сервис → Выполнить (Macro Tools | Design → Tools → Run).
Подсказка
Если вы применили в области переходов фильтрацию, такую что макрос не отображается на экране, вы все же можете его запустить. Выберите на ленте Работа с базами данных → Макрос → Выполнить макрос (Database Tools → Macro → Run Macro). У вас появится возможность выбрать ваш макрос из списка.
Можно запустить макрос с помощью клавиш, например, задать запуск макроса, открывающего ежемесячный финансовый отчет при нажатии комбинации клавиш <Ctrl>+<F>. Вы узнаете, как это делается, в разд. "Назначение макросу комбинации клавиш " далее в этой главе.
Можно запускать макрос автоматически при первом открытии БД. Вы можете создать макрос, который позволяет всегда начинать работу с БД запуском вашего любимого запроса и отображением его результатов. В разд. "Настройка макроса запуска" далее в этой главе вы попробуете сделать это.
Рис. 15.4. Результат работы макроса ShowTheLastProduct. Программа Access открывает таблицу Products (в режиме Только чтение, поэтому запрещены любые изменения) и переходит к самой последней, самой свежей записи, а затем выводит на экран сообщение, информируя вас о завершении работы макроса
503

■ Можно присоединить макрос к форме. Вы можете задать автоматический запуск макроса при щелчке мышью кнопки или при вводе новых данных. Это наиболее распространенный способ выполнения макроса и именно так действует мастер построения макрокоманды. В разд. "Присоединение макросов к формам" далее в этой главе вы сможете опробовать этот метод.
В данной главе вы получите возможность проверить все описанные способы. Но прямо сейчас выберите простейший вариант и запустите созданный в предыдущем разделе макрос с
помощью команды Работа с макросами | Конструктор → Сервис → Выполнить, На рис. 15.4 показан результат.
Подсказка
Если вы хотите откорректировать уже созданный макрос, в области переходов щелкните его правой кнопкой мыши и выберите режим Конструктор. Вы попадете снова в окно макроса, которое использовали для его создания.
Отладка макроса
Не все макросы, действуют без сучка, без задоринки. Если вы допустили ошибку — может быть, ваш макрос пытается открыть несуществующий объект или использует бессмысленный аргумент — то получите исчерпывающее сообщение об ошибке, как показано на рис. 15.5.
Рис. 15.5. Это сообщение об ошибке выводится, если применяется макрокоманда ОткрытьТаблицу без заполненного обязательного аргумента Имя таблицы
Несмотря на то, что сообщения об ошибках макросов очень информативны, они не всегда предоставляют всю информацию, необходимую для точного указания проблемы. Например, сообщение об ошибке, приведенное на рис. 15.5, содержит несколько возможных причин - она могла (т. е. ошибка) появиться из-за аварийного завершения одной из команд ОткрытьТаблицу (что и произошло в данном примере), ПреобразоватьТекст или ПреобразоватьЭлектроинуюТаблицу. И даже если вы знаете, что виновата макрокоманда ОткрытьТаблицу, это знание не поможет вам, если в одном макросе эта команда вызывается несколько раз.
Для диагностики проблем можно использовать отладку — программное средство, позволяющее поместить ваш макрос под микроскоп и рассмотреть, что происходит на самом деле, Тип отладки, предоставляемый программой Access для макросов, называется пошаговой отладкой, поскольку позволяет поочередно тестировать команды макроса. Таким образом, вы узнаете, где именно возникает ошибка.
504

Для применения пошаговой отладки выполните следующие действия. 1. Откройте макрос в Конструкторе.
Все новые макросы начинают с режима Конструктор. Если вы хотите тестировать макрос, созданный ранее, найдите его в области переходов, щелкните правой кнопкой мыши
и выберите команду Конструктор.
2.Выберите на ленте Работа с макросами | Конструктор → Сервис → По шагам (Macro Tools | Design → Tools → Single Step).
По шагам (Single Step) — это кнопка-выключатель, т. е. она при выделении подсвечивается. После того как вы щелкнули эту кнопку, она должна быть подсвечена. (Если этого не произошло, значит, пошаговая отладка была уже включена, и вы ее только что выключили. Щелкните мышью кнопку По шагам еще раз, чтобы снова включить этот режим.)
3.Выберите на ленте Работа с макросами | Конструктор → Сервис → Выполнить.
Ваш макрос начнет выполняться. Но появилось отличие. Перед каждым действием программа Access выводит на экран важную информацию в окне Пошаговое исполнение макроса. На рис. 15.6 показано, как оно функционирует.
Рис. 15.6. Это окно сообщает о том, что вы выполняете макрос, названный ProblematicMacro. Следующий шаг — выполнение макрокоманды ОткрытьТаблицу с аргументами, отображенными в области Аргументы. (Не обращайте внимания на поле Условие, поскольку вы пока не научились выполнять макросы с условием)
4. В зависимости от того, что вы хотите делать дальше, щелкните мышью одну из кнопок:
Шаг, Продолжить или Остановить все макросы.
□Кнопка Шаг выполняет команду. Если действие завершается успешно, программа Access снова приостанавливает макрос и выводит окно Пошаговое исполнение макроса с информацией о следующей команде. Именно поэтому описываемый процесс называется пошаговым и позволяет выполнять в каждый момент времени одно действие. Если вы щелкните мышью кнопку Шаг и команда завершится аварийно, то увидите информацию об ошибке, как показано на рис. 15.7.
□Кнопка Продолжить выключает режим пошагового исполнения и выполняет оставшуюся часть макроса без прерываний. Если возникает ошибка, она приводит к завершению исполнения и выводу сообщения об ошибке, как в предыдущем варианте.
505

Рис. 15.7. Когда возникает ошибка, вы не можете двигаться дальше. В окне Ошибка выполнения макрокоманды программа Access выводит номер ошибки для вашей проблемы (который полезен, если нужно искать помощь в интерактивной базе знаний корпорации Microsoft), и не разрешает вам идти дальше. Вы вынуждены щелкнуть мышью кнопку Остановить все макросы, устранить проблему и затем пробовать снова
□Кнопка Остановить все макросы завершает исполнение макроса досрочно. Слово "все" в названии кнопки означает, что если одновременно выполняется несколько макросов, Access завершит их все. Вы можете создать макрос, который запускает другой макрос. Если вы прекращаете процесс с описанной последовательностью действий, оба макроса будут завершены досрочно.
Примечание
Режим пошагового исполнения влияет на все макросы, включая те, которые созданы с помощью мастера построителя макрокоманды. Не забудьте отключить его, когда закончите тестирование своего макроса. В противном случае появится окно Пошаговое исполнение макроса, когда вы применяете макрос, работающий совершенно правильно.
Практические занятия для опытных пользователей. Обработка ошибок макроса
В макросах вы сталкиваетесь с двумя типами ошибок. Во-первых, существуют ошибки, которые сделаны в процессе создания макроса. С помощью пошаговой отладки вы можете локализовать их и исправить. Во-вторых, есть ошибки, которые возникают, когда макрос применяется в неверном контексте. Возможно, нужных вам данных нет в текущей записи или форма, которую вы пытаетесь использовать, не открыта. Устранить такого сорта ошибки не удастся с помощью изменения макроса, но можно сообщить программе Access, как поступать с ними.
Обычно Access прерывает выполнение макроса при возникновении ошибки. Если вы хотите применить другой подход, начните ваш макрос с макрокоманды ПриОшибке (OnError). Команда ПриОшибке выбирает в зависимости от значения аргумента Перейти (GoTo) один из трех вариантов обработки ошибок. Задайте его значение равным Сбой (Fail) для реализации стандартного поведения. Задайте в этом аргументе значение Далее (Next), и программа Access пропустит вызывающую сбой макрокоманду и выполнит следующую команду из списка.
506

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

на ленте Работа с макросами | Конструктор → Показать или скрыть → Показать все
действия (Macro Tools | Design → Show/Hide → Show All Actions). Теперь раскрывающийся список макрокоманд содержит несколько больше возможных вариантов. Когда во время создания макроса выбирается опасная макрокоманда, Access дает вам знать об этом с помощью предупреждающей пиктограммы (рис. 15.8).
Рис. 15.8. Восклицательный знак в треугольнике выделяет макрокоманды, которые программа Access может отказаться выполнять. В данном примере макрокоманда Печать может вызвать проблемы
Примечание
У программы Access нет представления о том, какие макрокоманды более, а какие менее опасны. Она просто делит их на безопасные и опасные.
На профессиональном уровне. Макрокоманды, которым Access не доверяет
Ниже приведен перечень наиболее распространенных потенциально опасных макрокоманд.
•Удаление объекта. Очевидно опасное действие.
•Печать объекта. Неизвестно, сколько бумаги вам понадобится для печати.
•Копирование объекта. Злоумышленник может использовать это действие для создания макроса, который заполнит вашу БД.
•Сохранение объекта. Это действие может показаться совершенно невинным, но его легко объединить с другими действиями для создания макроса, изменяющего объект БД и впоследствии сохраняющего поддельную версию объекта.
•Копирование файла вашей БД. В конечном счете, это действие может перезаписать копию, которую вы уже сделали, или заменить какой-либо важный файл. Экспорт данных считается столь же рискованным.
•Раскрытие окна на весь экран, сворачивание окна на панель задач и перемещение окна.
Возможно, корпорация Microsoft перестраховывается, решив не доверять подобным макрокомандам, которые позволяют менять местоположение форм и других окон. В любом случае эти макрокоманды используются нечасто в Access 2007, поскольку они не применимы в случае окон со вкладками, а могут использоваться только в случае редко применяемых свободно плавающих окон.
508

•Выполнение команд SQL. Как вы узнали из разд. "Режим SQL" главы 6, SQL — это язык, лежащий в основе запросов программы Access. Вы можете применять непосредственно команды SQL для выполнения практически любой задачи в вашей БД, начиная от удаления десятков записей и заканчивая созданием новой таблицы.
•Выполнение VB-кода. Несмотря на то, что это действие не помечается пиктограммой с восклицательным знаком, Access считает весь VB-код опасным. Вы узнаете больше об этом в главе 16.
•Пересылка случайных нажатий клавиш. Макрокоманда
КомандыКлавиатуры (SendKeys) позволяет пересылать поток клавиатурных кодов в активное в данный момент окно. Вы можете сделать все что угодно, и в этом проблема. Респектабельные пользователи Access вообще избегают применения команды КомандыКлавиатуры, поскольку она содержит ошибки. (Фатальные проблемы возникают, если щелкнуть кнопкой мыши во время выполнения макроса, и приводят к направлению клавиатурных кодов совсем не в то окно, для которого они предназначались.)
Некоторые макрокоманды могут рассматриваться как опасные с учетом применяемых в них аргументов.
•Завершение программы Access. Access позволяет выполнить, обычную макрокоманду Выход (Quit), в которой пользователю, работающему с БД, предлагается сохранить изменения, отменить их или отказаться от требования выхода из программы. Но макрокоманду Выход можно настроить так, что она будет закрывать программу немедленно без предложения сохранить что бы то ни было (или закрывать немедленно и сохранять все неподтвержденные изменения). Если использовать один из этих вариантов, Access трактует команду как опасную.
•Отправка электронной почты. Эта макрокоманда считается опасной, если вы не разрешаете пользователю макроса перед отправкой подтвердить корректность электронного сообщения или отказаться от него.
Как Access обрабатывает опасные макросы
Вы уже знаете разницу между опасными и безопасными макрокомандами, но вы еще не рассматривали действия программы Access при столкновении лицом к лицу с рискованными действиями. В предыдущих версиях Access на экран выводился поток предупреждающих сообщений. Программа Access 2007 решает проблему самостоятельно, незаметно отключая опасные макросы при любом открытии файла БД.
Как вы уже, безусловно, заметили, когда открывается БД, программа Access отображает сообщение системы безопасности, показанное на рис. 15.9. Оно предупреждает о том, что Access отключает любые потенциально опасные части вашей БД.
Примечание
Панель с сообщением можно скрыть. Если полагаете, что программа Access отключила некоторые макросы, но не хотите видеть панель сообщений, выберите на ленте Работа с базами данных → Показать или скрыть → Панель сообщений (Database Tools → Show/Hide → Message Bar).
509

Рис. 15.9. На панели сообщений выводится угрожающее предупреждение. Для повторного включения опасных макросов в вашей БД щелкните мышью кнопку Параметры и затем в появившемся окне (см. рис. 15.10) выберите переключатель Включить это содержимое. Разрешение, которое вы установите, продлится до тех пор, пока БД будет открыта, поэтому выбирать переключатель Включить это содержимое придется при каждом открытии БД. Можно также щелкнуть кнопкой мыши ссылку Открыть центр управления безопасностью (показанную на рис. 15.10) для того, чтобы настроить параметры безопасности на более длительный период
Рис. 15.10. При щелчке мышью кнопки Параметры (см. рис. 15.9) программа Access растолковывает проблему с помощью этого слегка замысловатого поля Сообщение. Выберите переключатель Включить это содержимое, щелкните мышью кнопку ОК и спокойно действуйте дальше
510