Понятие макрокоманды и макроса. Создание макроса пользовательского интерфейса Способы выполнения макрокоманд

Созданный макрос следует выполнить. Существует несколько способов запуска макросов:

1. Посредством команды Макросы→ Макрос →Сервис

2. С помощью комбинации клавиш, назначенных макросу;

3. Посредством команды меню, назначенной для данного макроса;

4. Посредством кнопки, назначенной данному макросу на панели инструментов.

Выбор способа запуска макроса определяется самим пользователем исходя из собственных потребностей и предпочтений. Второй способов целесообразно использовать для запуска наиболее часто выполняемых макросов. Третий – иллюстрирует возможность вводить в основное меню собственные команды и тем самым совершенствовать меню. Последний способ отличает наглядность запуска.

Рассмотрим более подробно каждый из указанных способов запуска макросов.

1. Команда Макросы→Макрос →Сервис – стандартный вариант вызова макроса на выполнение. В диалоговом окне Макрос выбрать созданный макрос и нажать кнопку [Выполнить]. Данный способ пригоден также для редактирования и удаления макрокоманды – кнопки [Правка], [Удалить].

2. С помощью комбинации клавиш (рис. 2):

Рис. 2. Диалоговое окно. Настройка клавиатуры для назначения макросу

сочетания клавиш в Microsoft Word.

2. Для вызова макроса в диалоговом окне Настройка клавиатуры на вкладке Новое сочетание клавиш указывается комбинация управляющих клавиш. Например, совместно с комбинацией цифровых или алфавитных клавиш (на латинице);

Затем нажимается кнопка [Назначить], которая производит назначение.

3. Вызов командой в меню – осуществляется стандартная настройка меню: добавление пункта меню, связанного с вызовом макрокоманды:

В появившемся диалоговом окне Настройка , на вкладке Команды из поля со списком Категории выбирается команда Макросы , а затем имя макроса;

после нажатия левой кнопкой мыши на имени макрокоманды появляется пунктирное изображение кнопки, которую следует отбуксировать в меню для добавления пункта меню. После этого левая кнопка мыши отпускается.

4. Посредством кнопки, назначенной данному макросу на панели инструментов (рис. 3):

В Word при нажатии кнопки [Панели] (см. рис. 1) в диалоговом окне Запись макроса появляется диалоговое окно Настройка , в котором на вкладке Команды из поля со списком Категории выбирается Макросы , а затем имя макроса;

после нажатия левой кнопки мыши на имени макроса появляется пунктирное изображение кнопки, которую следует перетащить на панель инструментов. После этого левая кнопка мыши отпускается;

щелкнув по кнопке [Изменить выделенный объект], можно выбрать понравившийся значок для кнопки, запустив командуü Выбрать значок для кнопки (рис. 4). Можно также редактировать значок с помощью команды Изменить значок для кнопки (окно Редактор кнопок ) (рис. 5).

Рис. 3. Диалоговое окно Настройка для назначения макросу
кнопки на панели инструментов в Microsoft Word.

Рис. 4. Диалоговое окно выбора значка для кнопки

Рис. 5. Диалоговое окно Редактор кнопок

В Excel дополнительно имеется возможность запуска макроса посредством назначенного ему графического образа.

После выбора способа вызова появляется небольшая панель инструментов Остановить запись , содержащая кнопку:

- [Остановить запись] – завершает запись макрокоманды;

[Пауза] – приостанавливает запись макрокоманды (рис. 6).

Рис.6. Панель записи макроса в Microsoft Word

  1. Изменение макросов

Макросы сохраняются в шаблоне в виде текстов программ. Каждый шаблон может содержать произвольное количество макросов. Поскольку dot-файлы (dot – расширение файлов шаблонов) нельзя читать как документы, в Word существуют специальные средства, позволяющие просмотреть и отредактировать макрос как последовательность операторов на языке VBA (рис.7). В процессе редактирования любой макрос представлен в виде последовательности операторов языка VBA. Суть редактирования макроса состоит в удалении, добавлении и замене операторов, как при программировании на любом другом языке.

Рис.7. Диалоговое окно редактора VBA

Редактирование макроса выполняется посредствам команды Макросы . В диалоговом окне Макрос , в поле Имя выбирается имя макроса, подлежащего редактированию. Процесс начинается при нажатии кнопки [Отладка]. Можно указать имя несуществующего макроса. Если после этого нажать кнопку [Создать], будет создан новый макрос, а пользователь получит возможность получит возможность записать его на языке VBA.

Кнопка [Отладка] служит для открытия окна редактирования макроса, в котором отображается содержимое макроса на языке VBA. Окно редактирования макроса подобно обычному окну документа, но отличается отсутствием координатной линейки и наличием специальной панели инструментов. Можно открыть несколько окон обработки макросов. Текст макроса редактируется так же, как обычный текст программы VBA. При этом доступно большинство команд редактирования текста, например команды Копировать и Вырезать .

С помощью кнопки [Удалить] указанный макрос удаляется.

Чтобы закрыть окно редактирования макроса, можно использовать системное меню окна редактирования или команду Закрыть в меню Файл . Специфические команды, предназначенные для редактирования и отладки макроса, выполняются путем нажатия кнопок в строке удаления.

Список литературы:

1. Мусин К.А «Техническое приложение к Microsoft Word»

2. Бородина А.И «Макропрограммирование»

1. Понятие макроса.

2. Обзор событий

3. Создание макросов.

3.1. Задание условий выполнения макрокоманд.

3.2. Создание группы макросов.

4. Запуск макроса.

1. Понятие макроса

Для автоматизации операций в СУБД MS Access предусмотрены два средства: макросы и модули . С помощью данных средств представляется возможность определить реакцию приложения на различные события, возникающие в формах и отчетах: нажатие кнопки, получение элементом управления фокуса, переход на новую запись, изменение данных, открытие формы, открытие отчета и т. п.

Макрос – это объект базы данных MS Access, представляющий собой набор из одной или нескольких макрокоманд и предназначенный для автоматизации часто выполняемых задач.

Макрокоманда – основной компонент макроса, замкнутая инструкция, самостоятельно или в комбинации с другими макрокомандами определяющая выполняемые в макросе действия. Каждая макрокоманда имеет определенное имя и возможно один или несколько аргументов, которые задаются пользователем.

Макрокоманды по функциональному признаку можно разделить на несколько категорий:

– работа с данными в формах и отчетах;

– выполнение команд, макросов, процедур и запросов;

– работа с объектами;

– импорт/экспорт данных и объектов;

– прочие.

В таблице 11.1 представлены 56 макрокоманд СУБД MS Access, сгруппированных по категориям.

Таблица 11.1

Назначение

Макрокоманда

Работа с данными в формах и отчетах

Отбор данных

ПрименитьФильтр (ApplyFilter)

Перемещение по данным

СледующаяЗапись (FindNext).

НайтиЗапись (FindRecord),

КЭлементуУправления

НаСтраницу (GoToPage),

НаЗапись (GoToRecord)

Обновление данных или экрана

Обновление (Requery)

ПоказатьВсеЗаписи (ShowAllRecords)

Выполнение

Выполнение команды

ВыполнитьКоманду (RunCommand)

Выполнение макроса, процедуры или запроса

ЗапускПрограммы (RunCode), ЗапускМакроса (RunМасго), ОткрытьЗапрос (OpenQuery), ЗапускЗапросаSQL (RunSQL)

Выполнение другого приложения

ЗапускПриложения (RunApp)

Прерывание выполнения

ОтменитьСобытие (CancelEvent),

ОстановитьВсеМакросы (StopAIIMacros),

ОстановитьМакрос (Stop Macro)

Выход из Microsoft Access

Выход (Quit)

Импорт/
экспорт

Передача объектов Microsoft Access в другие приложения

ВывестиВФормате (OutputTo),

ОтправитьОбъект (SendObiect)

Преобразование формата данных

ПреобразоватьБазуДанных (TransferDatabase), ПреобразоватьЭлектроннуюТаблицу (TransferSpreadsheet)

ПреобразоватьТекст (TransferText)

Работа с oбъeктaми

Копирование, переименование или сохранение объекта

КопироватьОбъект (CopyObject), Переименовать (Rename),

КопироватьФайлБазыДанных
(CopyDatabaseFile)

Удаление объекта

УдалитьОбъект (DeleteObject)

Изменение размеров или положения окна

Развернуть (Maximize),

Свернуть (Minimize),

СдвигРазмер (MoveSize),

Восстановить (Restore)

Открытие или закрытие объекта

ОткрытьФорму (OpenForm), ОткрытьМодуль (OpenModule), ОткрытьЗапрос (OpenQuery), ОткрытьОтчет (OpenReport), ОткрытьТаблицу (OpenTable),

ОткрытьФункцию (OpenFunction)

ОткрытьСтраницу (OpenDataAccessPage)

Открыть схему (OpenDiagram)

ОткрытьСохраненнуюПроцедуру (OpenStoreProcedure)

ОткрытьПредставление (OpenView)

Закрыть (Close)

Печать объекта

Печать (PrintOut)

Выделение объекта

ВыделитьОбъект (SelectObject)

Задание значения поля, элемента управления или свойства

ЗадатьЗначение (SetValue)

Обновление объекта

ОбновитьОбъект (RepaintObject)

Создание специальной или общей строки меню, специального или глобального контекстного меню

ДобавитьМеню (AddMenu)

Задание состояния пунктов меню в специальной или общей строке меню

ЗадатьКомандуМеню (SetMenultem)

Вывод информации на экран

ВыводНаЭкран (Echo),

ПесочныеЧасы (Hourglass),

Сообщение (MsgBox),

УстановитьСообщения (SetWarnings)

Генерация нажатий клавиш

КомандыКлавиатуры (SendKeys)

Вывод на экран или скрытие встроенной или специальной панели инструментов

ПанельИнструментов (ShowToolbar)

Подача звукового сигнала

Сигнал (Веер)

Более полную информацию по макрокомандам можно получить в разделе Справка Microsoft Access | Программирование в Microsoft Access | Макрокоманды .

Действия, которые могут быть выполнены с помощью макросов, очень разнообразны, поэтому для создания макросов необходимо знание макрокоманд. Знание макрокоманд будет полезно и при создании процедур на VBA, т. к. многие макрокоманды являются методами объекта DoCmd.

По месту хранения макросы разделяются на два вида:

простые (объект, состоящий из набора макрокоманд);

групповые (объект, состоящий из набора логически связанных макросов, каждый из которых имеет собственное имя и набор макрокоманд).

По способу выполнения макросы разделяются на два вида:

линейные (каждая макрокоманда в макросе выполняется последовательно одна за другой);

с условием (макрокоманды выполняются в зависимости от выполнения определенных условий).

2. Обзор событий

Событие – это любое действие, которое распознается объектом. События происходят в результате действий пользователя, выполнения инструкций VBA или генерируются системой. Примерами событий являются: открытие формы, переход в форме от одной записи к другой, закрытие отчета, щелчок по командной кнопке в форме и т. п.

Практически все программирование в MS Access сводится к написанию макросов или процедур, обрабатывающих события, т. е. программируется реакция объектов на происходящие события. События различных объектов MS Access представлены на рис.11.1 – 11.3.

События можно разделить на следующие категории, сгруппировав их по функциональному признаку (выполняемым операциям):

– открытие и закрытие форм и отчетов;

– изменение данных;

– смена фокуса ввода;

– события работы с клавиатурой;

– события работы с мышью;

– печать;

– отслеживание ошибок;

– истечение промежутка времени.

Рис.11.1. Вкладка События окна свойств формы.

Рис.11.2. Вкладка События окна свойств элемента управления Подчиненная форма/отчет.

Рис.11.3. Вкладка События окна свойств элементов управления. Кнопка (а) и Поле со списком (б).

3. Создание макросов

Создание макроса состоит из двух шагов:

1. В окне базы данных перейти на вкладку Макросы и щелкнуть по кнопке Создать .

2. В появившемся окне Конструктор макросов создать макрос.

Окно Конструктора макросов состоит из двух областей (рис.11.4):

– верхняя область предназначена для описания логической структуры макроса;

– нижняя область предназначена для описания аргументов макрокоманд.

В верхней области Конструктора макросов по умолчанию отображается два столбца Макрокоманда и Примечание . Отображение столбцов Имя макроса и Условие осуществляется с помощью соответствующих кнопок на панели инструментов Конструктор макросов .

Ячейки в столбце Макрокоманда используются для выбора из списка макрокоманды, включаемой в макрос.

Ячейки в столбце Примечание используются для описания действия выполняемого макрокомандой (могут быть незаполненными).

Ячейки в столбце Имя макроса используются для задания имени макроса в группе макросов.

Ячейки в столбце Условие используются для задания последовательности выполнения макрокоманд.

Рис.11.4. Окно Конструктор макросов

Для быстрого переключения между верхней и нижней областью окна Конструктора макросов можно использовать клавишу < F 6> .

Существует еще один способ ввода макрокоманд.

В окне базы данных выбирается объект: форма, отчет, макрос, запрос или таблица и с помощью мыши перетаскивается в окно Конструктор макросов . В поле столбца Макрокоманда автоматически появится макрокоманда (например, ОткрытьФорму ) и автоматически заполнятся некоторые аргументы макрокоманды (имя объекта, режим, режим окна).

Для ввода значений аргументов макрокоманды используется два способа:

– выбор значения из списка допустимых значений;

– ввод значения вручную или с помощью диалогового окна Построитель выражений .

Пример макроса позволяющего открыть форму "Клиенты" в режиме формы, только для чтения и отобразить клиентов только из Испании, представлен на рис.11.5.

Рис.11.5. Окно Конструктор макросов с заполненными значениями аргументов

3.1. Задание условий выполнения макрокоманд

Для создания макросов нелинейной структуры необходимо отобразить столбец Условие и указать в нем условие выполнения макрокоманд.

Выполнение макроса начинается с первой макрокоманды и продолжается до тех пор, пока не встретится пустая строка (признак окончания макроса), имя другого макроса или макрокоманда ОстановитьМакрос . Макрокоманды, для которых определены условия, выполнятся только в том случае, если условие, записанное в строке макрокоманды, имеет значение Истина . Для распространения условия на последующие макрокоманды необходимо в столбце Условие указать троеточие ().

Пример создания макроса нелинейной структуры

В форме Поставщики имеется два поля Страна и Индекс . Необходимо до обновления записи (перед сохранением) проверить правильность введенного индекса для некоторых стран.

Если поле Страна имеет значение NULL, то сохранить запись, т. к. проверка индекса на принадлежность стране невозможна, иначе осуществить проверку значения в поле Индекс :

– если поле Страна имеет значение Франция , Италия или Испания , а в поле Индекс введено не 5 знаков, то не сохранять запись, если 5 – сохранить;

– если поле Страна имеет значение Австралия или Сингапур , а в поле Индекс введено не 4 знака, то не сохранять запись, если 4 – сохранить;

Алгоритм макроса в виде блок-схемы представлен на рис 11.6, а реализация макроса в окне Конструктор макросов , приведена на рис.11.7.

Данный макрос связан со свойством До обновления на вкладке События формы Поставщики .

Рис.11.6. Алгоритм работы макроса

Рис.11.7. Реализация макроса, имеющего нелинейную структуру

3.2. Создание группы макросов

Для автоматизации приложения требуется применение значительного числа макросов. Если создавать макросы для каждой отдельной операции, то в этом случае в базе данных накопятся сотни различных макросов.

Для сокращения количества макросов, как объектов базы данных, существует другой способ их организации – объединение нескольких макросов в группу. Объединение макросов в группу можно осуществлять по двум признакам:

– принадлежности к объекту автоматизации (для каждой формы и отчета);

– принадлежности к типу автоматизируемых операций.

Группа макросов хранится в одном объекте и, следовательно, имеет одно общее имя – имя объекта. Для запуска макроса, входящего в группу, используется полное имя: [Имя_группы].[Имя_макроса_в_группе].

Для создания группы макросов необходимо выполнить следующие действия:

1. Открыть Конструктор макросов .

2. Отобразить столбец Имя макроса.

3. В ячейке столбца Имя макроса ввести уникальное для группы имя макроса.

4. В ячейках столбца Макрокоманда , начиная со строки, в которой находится имя макроса, ввести все макрокоманды составляющие макрос и их аргументы.

5. Пропустить одну строку.

6. Повторить шаги 3 – 5 для каждого макроса.

Пример создания группы макросов представлен на рис.11.8.

Рис.11.8. Реализация группы макросов

4. Запуск макроса

Способов запуска макросов очень много.

Среди них есть способы, когда макрос запускается пользователем. Эти способы используются в основном при тестировании макросов.

После отладки макроса, для его запуска создается командная кнопка в форме, команда меню или кнопка на панели инструментов или макрос связывается с событием в форме или отчете. Макрос может быть запушен и из другого макроса, а также программно – из процедуры VBA.

Запуск макроса из Конструктора макросов.

Для запуска простого макроса или первого макроса из группы щелкнуть по кнопке Запуск на панели инструментов Конструктор макросов .

Для запуска любого макроса из группы выполнить команду Сервис | Макрос | Выполнить макрос … и в диалоговом окне Запуск макроса выбрать имя макроса.

Запуск макроса из окна базы данных.

Для запуска простого макроса или первого макроса из группы перейти на вкладку Макросы , выбрать макрос и щелкнуть по кнопке Запуск в окне БД.

Запуск любого макроса из группы см. выше.

1. Открыть форму или отчет в режиме Конструктор .

2. Выделить объект автоматизации (элемент управления, форму или отчет, раздел формы или отчета).

3. Открыть диалоговое окно Свойства объекта .

4. Выбрать событие на вкладке События , которому назначается макрос.

5. Выбрать из списка полное имя макроса.

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

Рис.11.9. Назначение макроса событию

Макрос с именем Autoexec запускается автоматически при открытии базы данных. Для отмены действий, указанных в данном макросе, необходимо открывать базу данных при нажатой клавише > .

Палитра Actions (Операции) используется для записи, выполнения и редактирования последовательности действий по обработке изображений (такуюпоследовательность действий, получающую название и запускающуюся одной командой, принято называть МАКРОКОМАНДОЙ).Для того чтобы вывести палитру на экран, необходимо выполнить командуActions (Операции) меню Window (Окно).

Палитра Actions (Операции) содержит набор команд в виде строк,которые раскрываются, если щелкнуть на треугольной стрелке, показывающей вправо. Каждая команда открывает список параметров команды, еслитаковые имеются.


В левой колонке расположены поля, которые служат для включения иливыключения отдельных команд, а рядом с ними поля для включения и отключения вывода диалоговых окон соответствующих команд.


В нижней части палитры расположены следующие кнопки:
Stop Playing/Recording (Остановка выполнения/записи);
Record (Запись);
Play (Воспроизведение);
New Set (Новый набор);
New Action (Новая операция);
Trash (Корзина).



Однако палитра может иметь и другой вид - в форме командных кнопок.Чтобы представить палитру в таком виде, необходимо открыть список команд палитры и выбрать пункт Button Mode (Представить в виде кнопок).Для возврата в списочный режим палитры следует выполнить ту же командуповторно.


ИЗМЕНЕНИЕ ПОРЯДКА КОМАНД В МАКРОКОМАНДЕ


Пользователь имеет возможность видоизменить последовательность выполнения команд. Кроме того, команды одной макросы можно переместить в другие.


Для того чтобы изменить порядок команд, необходимо в списке палитрызахватить команду и переместить ее в новое положение. Жирная линия отображает положение строки команды во время перемещения.


СОЗДАНИЕ И ЗАПИСЬ МАКРОКОМАНД


Создание макрокоманды - на сленге дизайнеров и разработчиков графики - "экшена"(action) заключается в том, что во время выполнения той или иной последовательности команд программа Adobe Photoshop записывает их в том же порядке, включая и те параметры, которые применялись каждой конкретной командой. Таким образом, можно записать любую последовательность команд и в дальнейшем использовать ее, сокращая время и, главное, усилия на выполнение рутинных операций.



Разработка подобных макрокоманд - "экшенов" открывает широкие возможности пользователям для приложения своих творческих сил. По назначению результат близок к модулю Plugin, но создается легче и не требует специальных знаний.


В макропрограмме могут использоваться действия инструментов Gradient(Градиент), Marquee (Область), Crop, Polygon LassoLine (Линия), Move, Magic Wand (Волшебная палочка), PaintBucket (Заливка) и Type, а также установки палитр Paths(Контуры), Channels (Каналы), Layers (Слои) и History (История).


Однако существуют и ограничения: некоторые команды и функции могутвключаться в макросы только с помощью процедуры записи выполняемых действий. Для включения в операцию команд, которые не могут быть определены во время записи, следует использовать команду Insert Menu Item (Вставить пункт меню).


Любопытно, что в макрокоманду могут быть помещены команда Play(Вопроизведение) из меню палитры и команда Batch (Пакетная обработка)меню File/Automate (Файл/Автоматизация).


Следует обратить внимание еще на одно очень существенное ограничение.Успех выполнения записанной макросы с другим документом и в другое время в значительной степени зависит от параметров другого документа (цветовой модели, разрешения, активного слоя и т. д.), а также от текущих установок программы (например, основного и фонового цветов и некоторых других).


Скажем, использование фильтра Gaussian Blur (Размытие по Гауссу) со значением 3 пиксела к документу с разрешением для экрана (72 dpi) - это совсем не то, что применение его к изображению с высоким разрешением (300 dpi). Поэтому макросы, создаваемые таким образом, в значительной степени могут иметь сугубо ситуативный характер. Но и это может сэкономить много времени, особенно если речь идет о большом объеме однотипной обработки изображений.


Поскольку, чтобы записать последовательность команд, их нужновыполнить, а так как можно случайно ошибиться, настоятельно рекомендуется проводить эксперименты с копиями особенно важных документов.


Следует также иметь в виду, что при использовании в качестве элементовмакросы команд Save As (Сохранить как) или Save a Copy (Сохранить копию) в диалоговых окнах этих команд не нужно вводить конкретные имена файлов.


ПОЕХАЛИ!


Итак, для того чтобы создать макрокоманду методом записи, необходимо открыть редактируемый документ, вывести на экран палитру Actions (Операции), выбрать в ней набор макрокоманд и выполнить одно из двух действий:- нажать на кнопку New Action (Новая операция);- использовать команду New Action (Новая операция) меню палитры.


В обоих случаях на экран будет выведено диалоговое окно New Action (Новая операция), в котором можно присвоить имя макрокоманде (поле Name (Имя)), определить набор макрокоманд (раскрывающийся список Set (Набор)) и комбинацию клавиш для ее запуска (поле Function Key (Функциональная клавиша)), а также выбрать один из семи цветов для отображения имени макросы в палитре (список Color (Цвет)).



Затем нажать на кнопку Record (Запись), после чего точка на кнопке записив палитре Actions (Операции) станет красного цвета.


Теперь можно начинать выполнение команд, которые необходимо сохранить в макрокоманде. Если команда имеет диалоговое окно, то после установки нужных значений следует нажать на кнопку ОК. Если предполагается делать изменения настроек в процессе выполнения макросы, то можно оставить значения по умолчанию, но и в этом случае нажатие на кнопку ОК обязательно. При выходе из диалогового окна после нажатия на кнопку Cancel (Отменить) данная команда не записывается в макрокоманду.Остановка записи происходит при нажатии на кнопку Stop (Остановка) в нижней части палитры Actions (Операции).


ВСТАВКА ПУНКТОВ МЕНЮ


Многие команды, которые не записываются во время исполнения (например, параметры рисующих инструментов, команды просмотра и некоторые другие), можно включить в список макросы с помощью команды Insert Menu Item (Вставить пункт меню) меню палитры.


Отличие такого включения от записи заключается в том, что в этом случаекоманда как таковая не выполняется (до начала работы макроса), а следовательно, никакие параметры команды не фиксируются, и само собой разумеется, никакого действия на текущий документ не оказывается. Это в чистом виде операция программирования.Во время выполнения макроса для такой команды открывается соответствующее диалоговое окно, в котором пользователю необходимо определить свои собственные параметры или принять параметры по умолчанию и нажать на кнопку ОК.


Для того чтобы вставить пункт меню в макрокоманду, необходимо определить место вставки в существующей макрокоманде: выделить имя макроса в списке палитры, выполнить команду Insert Menu Item (Вставить пункт меню), которая выведет на экран одноименное диалоговое окно, а затем открыть и выделить команду, ПОСЛЕ КОТОРОЙ будет осуществлена вставка новой команды.


После нажатия на кнопку ОК в списке макросов появляется новая команда.


ВСТАВКА ОСТАНОВОК


Во время выполнения макроса достаточно часто возникает необходимость прервать действие на какое-то время для того, чтобы осуществить действие, которое невозможно записать, например выделить фрагмент изображения или сделать штрих одним из рисующих инструментов.Продолжение работы макроса осуществляется нажатием на кнопку Play (Воспроизведение) в нижней части палитры.Чтобы не забыть о назначении паузы (остановки), рекомендуется сохранить для себя и потомков... короткое FAQ в поле Message (FAQ).


Для вставки остановки в список макросов необходимо выполнить одно из двух приведенных ниже действий:
определить место вставки остановки в существующей макрокоманде: выделить имя макроса в списке палитры, открыть и выделить команду, после которой будет вставка остановки;
выполнить команду Insert Stop (Вставить остановку) меню палитры, которая выводит на экран диалоговое окно Record Stop (Записать остановку), параметры этой команды также отображаются в палитре Actions (Операции).


В поле Message (FAQ) можно ввести произвольный текст, который будет выводиться при остановке макроса. При включении флажка Allow Continue (Разрешить продолжение) в диалоговом окнесообщении выводится кнопка Continue (Продолжить).


ВЫПОЛНЕНИЕ МАКРОКОМАНД


Выполнять последовательность действий макросов можно с любой команды и в произвольном сочетании (хотя и в одной последовательности).


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


Если команда предполагает наличие диалогового окна, оно может быть выведено для установки или изменения параметров. Если вывод диалогового окна отключен, программа будет использовать текущие установки диалогового окна (а само окно выводиться не будет). Для определения вывода на экран диалогового окна во время выполнения макросы необходимощелкнуть в столбце рядом с именем команды. Если в этой клеточке отображается символическое изображение диалогового окна, то диалоговое окно будет выводиться, и наоборот.


ПРИМЕНЕНИЕ МАКРОКОМАНДЫ К ОТДЕЛЬНОМУ ДОКУМЕНТУ


Последовательность действий для применения макросов к отдельному документу (в противоположность пакетной обработке) может быть следующей:
Открыть необходимый документ.
Для того чтобы выполнить макрокоманду полностью, требуется выделить имя макроса, а если надо выполнить макрокоманду не с начала, следует открыть и выделить команду, с которой следует начинать выполнение.
Чтобы запустить выполнение макроса, можно воспользоваться кнопкой Play (Воспроизведение) в нижней части палитры или командой Play (Воспроизведение) меню палитры.


Двойной щелчок на имени макроса в палитре выводит на экран диалоговое окно Actions Options (Параметры операции), которое идентично диалоговому окну New Action (Новая операция). Если же двойной щелчок выполнить при нажатой клавише, макрокоманда начинает выполнение от начала и до конца.


Следует иметь в виду, что поскольку макрокоманда - это последовательность команд (хотя минимально она может состоять из одной команды), выполнить отмену действия всей макрокоманды с использованием команды undo (отменить) нельзя. Команда undo (отменить) позволяет вернуться только на один шаг назад. ...увы, но это так..


Вместе с тем отменить действие макроса можно, если использовать возможности палитры History (История): выполнить "снимок" изображения до выполнения макроса и затем "вернуться" к нему.


СКОРОСТЬ ВЫПОЛНЕНИЯ ЭКШЕНА


Сложный экшен зачастую требует отладки, но в некоторых случаях не так легко определить место сбоя ввиду слишком быстрого выполнения конкретных команд. Если требуется этап отладки, то можно воспользоваться командой Playback Options (Режим выполнения) меню палитры. На экран выводится одноименное диалоговое окно, в котором можноопределить скорость выполнения макросы.


Оно содержит ряд параметров:
Переключатель Accelerated (Быстрое), включенный по умолчанию, обеспечивает нормальную скорость, которая вполне приемлема для правильно работающей макропрограммы.
Переключатель Step by Step (Пошаговое) обеспечивает выполнение макроса по шагам с прорисовкой изображения после каждой отдельной команды. Такой режим требует от пользователя достаточно напряженного внимания, чтобы успеть зафиксировать неверные действия.
Переключатель Pause For ... seconds (С остановками на... секунд) позволяет самому пользователю определить степень своего внимания и ввести время задержки в секундах между выполнением команд.
Флажок Pause For Audio Annotation (Пауза для звуковых комментариев)позволяет создать паузу для прослушивания звукового комментария.


РЕДАКТИРОВАНИЕ МАКРОКОМАНД


Запись макрокоманд можно дополнить их последующим редактированием, например можно изменить порядок команд, добавить новые команды, повторить команды, изменить параметры команд, а также удалить команды.


Непосредственно на панели Actions (Операции) можно перенести любую макрокоманду в другой набор. Для этого необходимо захватить строку макроса и перетащить ее в нужный набор.Таким же образом можно изменить порядок команд в макрокоманде.


Для записи дополнительной команды надо выделить команду, после которой необходима вставка, а затем, нажав на кнопку Record (Запись) в нижней части палитры, выполнить нужную команду или последовательность команд. Щелчок на кнопке Stop (Остановка) прекратит запись.


Предусмотренная в палитре Actions (Операции) возможность повторения команд и макрокоманд очень полезна для редактирования самих макрокоманд и создания на их базе новых макрокоманд.


Повторение команды или макроса можно осуществить одним из следующих способов:
при нажатой кнопке можно захватить и перетащить нужную команду или макрокоманду в новое положение в списке палитры;
можно выделить команду или макрокоманду и выполнить команду Duplicate (Повторить) меню палитры;
можно перетащить имя команды или макроса на кнопку New Action (Новая операция) в нижней части палитры. Для выделения нескольких команд необходимо использовать клавиши или.


Для изменения параметров команды достаточно дважды щелкнуть на строке команды и вызвать соответствующее диалоговое окно.


В любой момент можно удалить макрокоманду целиком или произвольную отдельную команду, входящую в макрокоманду.Для этого в списке макрокоманд следует выделить нужную (точнее, ненужную) макрокоманду или команду и щелкнуть на кнопке Trash (Корзина)в нижней части палитры или выполнить команду Delete (Удалить) меню палитры. Как то, так и другое действие выведет на экран окно-запрос на удаление, и после некоторого раздумья можно будет нажать на кнопку ОК.


Команду или макрокоманду без запроса можно удалить щелчком на кнопке Trash (Корзина) при нажатой клавише.


После БОЛЕЕ ДОЛГОГО РАЗДУМЬЯ можно решиться на удаление всех макрокоманд. Для этого необходимо выполнить команду Clear Actions (Очистить палитру) меню палитры и подтвердить свое решение.Если все операции, созданные пользователем, становятся излишними, от них можно избавиться с помощью команды Reset Actions (Восстановить операции) меню палитры. Щелчок на кнопке Append (Добавить) в открывшемся диалоговом окне добавит в панель набор макрокоманд,поставляемых вместе с программой.



Поскольку нельзя бесконечно добавлять новые макросы, в программе предусмотрена возможность создания наборов (set) макрокоманд и сохранения их на диске в специальном файле с расширением.atn.


Это позволяет более рационально организовывать работу над различными проектами или разными типами изображений, а также передавать другим пользователям для обеспечения идентичной обработки изображений. Сохранять можно только наборы макрокоманд целиком, отдельные макросы или команды сохранять нельзя (если только они не составляют набор), новые макросы автоматически сохраняются в файле Actions Palette.psp (в папке WindowsApplication DataAdobePhotoshopCS2Adobe Photoshop Settings). При удалении этого файла (с целью восстановления исходных установок программы) будет удален и набор макрокоманд, поэтому вполне разумно заранее сохранить макросы в независимом файле.


Для того чтобы создать новый набор макрокоманд, необходимо выполнить команду New Set (Новый набор) меню палитры или нажать на кнопку Create New Set (Создать новый набор), расположенную в нижней части панели Actions (Операции). В обоих случаях на экран выводится диалоговое окно, в котором требуется ввести имя набора или принять предлагаемое программой.



Имя набора можно в любой момент изменить, вызвав это же диалоговое окно командой Set Options (Задать параметры).Для сохранения набора макрокоманд достаточно выделить необходимый набор и выполнить команду Save Actions (Сохранить операции) меню палитры. На экран будет выведено диалоговое окно Save (Сохранить), в котором можно присвоить имя набору макрокоманд (или оставить текущее) и определить папку для хранения.


Для замены текущего набора макрокоманд на ранее сохраненный необходимо выполнить команду Replace Actions (Заменить операции) меню палитры.Для загрузки нового набора макрокоманд, который добавится в конец списка текущих макрокоманд, надо выполнить команду Load Actions (Загрузить операции) меню палитры.В обоих случаях на экран выводится диалоговое окно Load (Загрузить), в котором можно выбрать файл с расширением.atn.
На заметку..


Самый ходовой способ добавления "экшенов" в фотошоп начиная с версии 7 и выше в среде дизайнеров очень прост, из какого либо окна Windows ПЕРЕТАСКИВАЕТСЯ файл с расширением.ATN в окно Фотошопа, на пустое место. Он сразу "готов к употреблению". Быстро и удобно.

Основной набор средств Microsoft Access, который мы рассматривали в предыдущих главах книги, ориентирован на пользователей, не владеющих языками программирования. Для программистов же к этим средствам добавлены макросы (небольшие программы на языке макрокоманд системы Access) и модули (процедуры на языке Visual Basic for Application, VBA). С их помощью можно существенно расширить функциональные возможности создаваемого вами приложения и настроить его на нужды конкретных пользователей. В этой главе мы познакомимся с одним из этих средств - макросами и одним из языков программирования Access - языком макрокоманд. С модулями и языком VBA мы вас познакомим в гл. 13,

Итак, мы будем обсуждать следующие вопросы:

  • Понятие макроса
  • Использование макросов в приложениях-
  • Создание макросов и групп макросов
  • Задание условий для управления процессом выполнения макроса
  • Различные способы запуска макросов
  • Советы по отладке макросов
  • Обработка событий в формах и отчетах с помощью макросов

Использование макросов в базе данных Microsoft Access

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

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

В табл. 11.1 содержится список макрокоманд Microsoft Access 2002, сгруппированных по категориям: работа с данными в формах и отчетах; выполнение команд, макросов, процедур и запросов; работа с объектами; импорт/экспорт данных и объектов и прочие. В категорию «Прочие» собраны все макрокоманды, которые позволяют влиять на интерфейс приложения.

Категория Назначение Макрокоманда
Работа с данными в формах и отчетах Отбор данных Применить Фильтр (ApplyFilter)
Перемещение по данным СледующаяЗапись (FindNext) НайтиЗапись (FindRecord) КЭлементуУправления (GoToControl) НаСтраницу (GoToPage) НаЗапись (GoToRecord)
Обновление данных или экрана Обновление (Requery) ПоказатьВсеЗаписи (ShowAllRecords)
Выполнение Выполнение команды Выполнить Команду (RunComraand)
Выполнение макроса, процедуры или запроса ЗапускМакроса (RunMacro) Залуск Программы (RunCode) ОткрытьЗапрос (OpenQuery) 3anycк 3anpoca SQL (RunSQL)
Выполнение другого приложения Запуск Приложения (RunApp)
Прерывание выполнения Отменить Событие (CancelEvent) Остановить ВсеМакросы (StopAllMacros) ОстановитьМакрос (StopMacro)
Выход из Microsoft Access Выход (Quit)
Импорт/экспорт Передача объектов Microsoft Access в другие приложения Вывести В Формате (OutputTo) ОтправитьОбъект (SendObject)
Преобразование формата данных Преобразовать БазуДанных (Transfer Database) ПереносБазыДанныхSQL (TransferSQLDat abase) Преобразовать ЭлектроннуюТаблицу (Transfer Spreadsheet) ПреобразоватьТекст (TransferText)
Работа с объектами Копирование, переименование и сохранение объекта КопироватьОбъект (CopyObject) Копировать Файл БазыДанных (CopyDatabase File) Переименовать (Rename) Сохранить (Save)
Прочие Вывод на экран или скрытие встроенной или специальной панели инструментов Подача звукового сигнала ПанельИнструментов (ShowToolbar) Сигнал (Веер)

Таблица 11.1. Макрокоманды Microsoft Access 2002

Как видно из этой таблицы, действия, которые могут быть выполнены с помощью макросов, очень разнообразны. Даже если вы не будете использовать макросы в своих приложениях, имеет смысл изучить эти макрокоманды, поскольку их можно использовать и в процедурах VBA, как будет показано далее (см. гл. 13).

По сравнению с предыдущей версией Access, в Microsoft Access 2002 появились три новые макрокоманды:

ПереносБазыДанныхSQL (TransferSQLDatabase) - переносит базу данных Microsoft SQL Server 7.0 и выше на другой сервер;

КопироватьФайлБазыДанных(CopyDatabaseFile) - выполняет копирование текущей базы данных Microsoft SQL Server 7.0 и выше, присоединенной к проекту Access;

ОткрытьФункцию (OpenFunction) - выполняет функцию, определенную пользователем, в проекте Access. Эта функция- представляет собой запрос, который, используя входные параметры, возвращает результаты так же, как и хранимая процедура.

Использование макросов оправдано тем, что их легко создавать, и для этого не нужно изучать синтаксис языка программирования. Как будет показано в следующем разделе, для создания макроса требуется знать лишь основные приемы работы в Microsoft Access и Windows, такие как перетаскивание объектов из окна База данных (Database) в специальное окно - Конструктор макросов (Macro Design), выбор действия из списка и ввод выражений в качестве аргументов макрокоманды. Поэтому, если очень не хочется изучать синтаксис языка VBA или это представляется слишком трудным, смело применяйте макросы, и вы получите достаточно функциональное приложение.

Как уже говорилось выше, основное назначение макросов - это создание удобного интерфейса приложения: чтобы формы и отчеты открывались при нажатии кнопок в форме или на панели инструментов или же привычным выбором команды меню; чтобы при открытии приложения пользователь видел на экране не окно База данных (Database), наполненное множеством таблиц, запросов, форм и отчетов, а некую понятную форму, с помощью которой можно было бы сразу производить желаемые действия и т. д.

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

Однако использование макросов имеет и некоторые недостатки, о которых здесь уместно сказать.

  • Возможности макрокоманд ограничены по сравнению с возможностями языка VBA, поэтому в ряде случаев без программирования на VBA не обойтись, хотя сначала нужно быть уверенным, что эти дополнительные возможности действительно нужны. Язык VBA предоставляет более широкие возможности для работы с данными, позволяет использовать механизм программирования объектов для связи с другими приложениями, вызывать функции из библиотек динамической загрузки (DLL) Windows и создавать собственные специализированные функции.
  • Макросы можно использовать практически везде, где применяются процедуры VBA, однако процедуры VBA, как правило, выполняются быстрее.
  • Макросы являются объектами, существующими отдельно от форм и отчетов, в которых они используются, поэтому, когда этих объектов становится очень много, их поддержка достаточно трудоемка. Процедуры обработки событий VBA являются неотъемлемой частью форм и отчетов, и в этом есть свои преимущества. Например, при переносе форм и отчетов из одной базы данных в другую с ними автоматически переносятся связанные процедуры.

Тем не менее, как уже отмечалось, во многих случаях использование макросов вполне оправдано, т. к. это существенно упрощает и ускоряет разработку приложения. С помощью макросов можно создавать небольшие однопользовательские приложения, хотя при создании многопользовательских или клиент-серверных приложений, где скорость работы приложения критична, лучше применять VBA.

Создание макросов

В Microsoft Access существует специальное средство для создания макросов - Конструктор макросов (Macro Design). Рассмотрим процесс создания макроса с помощью Конструктора.

Конструктор макросов

Открыть окно Конструктор макросов (Macro Design) для создания нового макроса можно двумя способами:

  1. Раскройте список макросов в окне База данных (Database), щелкнув левой кнопкой мыши по ярлыку Макросы (Macros), и нажмите кнопку Создать (New) в верхней части окна (рис. 11.1).
  2. Щёлкните по стрелке вниз на кнопке Новый объект (New Object) на панели инструментов База данных (Database) и выберите элемент Макрос (Macro).

Окно Конструктора макросов построено аналогично окну Конструктора таблиц, т. е. разделено по горизонтали на две части: панель описаний и панель аргументов.

Верхняя часть окна Конструктора - панель описаний - состоит из нескольких столбцов. По умолчанию на этой панели выводится два столбца: «Макрокоманда» (Action) и «Примечание» (Comments). Панель описаний позволяет определить последовательность макрокоманд, из которых состоит макрос.

Строка в столбце «Макрокоманда» (Action) представляет собой поле со списком, в котором можно выбрать нужную макрокоманду.

Строка в столбце «Примечание» (Comments) - это обычное текстовое поле, в которое можно ввести комментарий, описывающий выполняемое действие.

Когда поле «Макрокоманда» (Action) заполнено, в нижней части окна Конструктора макросов появляется панель аргументов, предназначенная для ввода значений аргументов соответствующей макрокоманды. Список полей на этой панели зависит от выбранной макрокоманды и может отсутствовать, если макрокоманда не имеет аргументов. Таким образом, при создании макросов не нужно запоминать список аргументов для каждой макрокоманды.

На рис. 11.1 проиллюстрирован выбор макрокоманды Применить Фильтр (ApplyFilter). На панели аргументов имеются два поля, которые позволяют задать имя фильтра и условие отбора записей. Для того чтобы задать условие отбора записей, можно воспользоваться Построителем выражений (см. разд. «Создание выражений с помощью Построителя выражений» гл. 4).

Рис. 11.1. Конструктор макросов и панель аргументов

Такой макрос можно использовать в форме или отчете для того, чтобы ограничить число отображаемых записей.

Замечание

Для быстрого переключения между панелями описаний и аргументов, так же как при работе с таблицами и запросами в режиме Конструктора, можно использовать клавишу .

Существует еще один очень простой способ ввода макрокоманды. Допустим, нужно создать макрос, который должен открывать форму «Клиенты» (Customers) в приложении «Борей» (Northwind). Для этого в окне База данных (Database) необходимо щелкнуть по ярлыку Формы (Forms), затем, используя панель инструментов (способ 2), открыть окно Конструктор макросов (Macro Design) и перетащить с помощью мыши форму «Клиенты» (Customers) в поле «Макрокоманда» (Action) окна Конструктора макросов.

Совет

Для удобства перетаскивания объектов из окна База данных (Database) в форму выберите команду Окно, Слева направо (Window, Tile Vertically), чтобы расположить окна на экране рядом.

Тогда в поле «Макрокоманда» (Action) автоматически появится макрокоманда ОткрытьФорму (OpenForm) (рис. 11.2), а на панели аргументов автоматически заполнятся поля: в поле «Имя формы» (Form Name) появится имя формы «Клиенты» (Customers), в поле «Режим» (View) - значение по умолчанию Форма (Form), в поле «Режим окна» (Window Mode) - значение Обычное (Normal). Остальные поля останутся пустыми. Мы можем в этой же макрокоманде задать фильтр для отбора записей. Для этого введем в поле «Имя фильтра» (Filter Name) имя какого-нибудь фильтра, например «Менеджеры по продажам», который мы строили при изучении запросов (см. разд. «Создание запроса из фильтра» гл. 4).

Кроме того, можно сделать записи в этой форме недоступными для изменений, для чего в поле Режим данных (Data Mode) необходимо ввести значение Только чтение (Read Only).

Рис. 11.2. Автоматическое создание макрокоманд путем перетаскивания объектов

Аналогично можно создавать макрокоманды, перетаскивая из окна База данных (Database) таблицы, запросы, отчеты и другие макросы. При этом в окне Конструктора макросов будут появляться соответствующие макрокоманды: ОткрытьТаблицу (ОрепТаblе), ОткрытьЗапрос (OpenQuery) , ОткрытьОтчет (OpenReport), ЗапускМакроса(RunMacro).

Для ввода аргументов макрокоманды чаще всего требуется выбирать значения из списков или вводить выражения. Для ввода выражений можно воспользоваться Построителем выражений, кнопка которого находится справа от поля аргумента. Еще одна кнопка Построителя выражений находится на панели инструментов. Как и в других случаях, перед выражением нужно ставить знак равенства (=). Исключения составляют аргумент Выражение (Expression) макрокоманды ЗадатьЗначение (Setvalue) и аргумент Число повторений (Repeat Count) макрокоманды-ЗапускМакроса (RunMacro). Если ввести знак равенства перед выражением, задающим значение этих аргументов, то оно будет вычисляться дважды, что может привести к нежелательным результатам.

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

Итак, созданная нами макрокоманда будет открывать форму «Клиенты» (Customers) в режиме Только чтение (Read Only) и показывать в ней только менеджеров по продажам. Как уже было сказано ранее, макрос может содержать последовательность из нескольких макрокоманд. Поэтому в этом же макросе в следующей строке мы выберем макрокоманду Сообщение (MsgBox), которая после открытия формы будет отображать диалоговое окно с сообщением о том, какие клиенты представлены в форме. Для этого введем в поле Сообщение (Message) на панели аргументов текст сообщения, например Установлен фильтр Менеджеры по продажам, остальные поля можем оставить без изменения. Аргумент Сигнал (Веер) определяет, будет ли вывод сообщения сопровождаться звуковым сигналом. Аргумент Тип (Туре) определяет вид диалогового окна сообщения. Аргумент Заголовок (Title) позволяет задать текст, который будет выведен в заголовке окна сообщения.

Если база данных большая, отбор записей в форме может занять некоторое время, поэтому рекомендуется вывести на экран курсор в форме песочных часов, который будет показывать, что идет обработка данных. Для того чтобы сделать это, воспользуемся макрокомандой ПесочныеЧасы (Hourglass). Макрокоманды в макросе выполняются в той последовательности, в которой они записаны в столбце «Макрокоманда» (Action), т. е. сверху вниз. Макрокоманду ПесочныеЧасы (Hourglass) следует поставить первой, т. к. курсор должен измениться перед выводом формы. Таким образом, нам нужно вставить новую строку на панели описаний. Для этого установим курсор в первую строку панели и нажмем кнопку Добавить строки (Insert Rows) на панели инструментов или просто клавишу . Появится пустая строка. В этой строке в поле «Макрокоманда» (Action) выберем макрокоманду ПесочныеЧасы (Hourglass). В поле «Включить» (Hourglass On) панели аргументов появится значение Да (Yes), установленное по умолчанию, что нам и нужно. Чтобы вернуть первоначальный вид указателю мыши, в конце созданного макроса нужно ввести такую же макрокоманду ПесочныеЧасы (Hourglass), но со значением Нет (No) аргумента Включить (Hourglass On).

Строго говоря, эту макрокоманду лучше поставить перед макрокомандой вывода сообщения на экран. Сделать это элементарно, поскольку макрокоманды легко меняются местами с помощью мыши. Чтобы поменять две последние макрокоманды местами, выделите последнюю строку, щелкнув левой кнопкой мыши по области выделения строк (слева в окне Конструктора) и перетащите строку вверх. Горизонтальная линия показывает место нового положения строки. Отпустите кнопку мыши, когда эта линия окажется над предпоследней строкой.

Теперь остается только сохранить созданный макрос. Для этого можно выбрать в меню Файл (File) команду Сохранить как (Save As) или нажать клавишу . Появится окно сохранения макроса. Введите в поле ввода имя макроса, соблюдая правила именования объектов Access, например Менеджеры по продажам.

Замечание

В Microsoft Word и Excel имеются средства автоматической записи макросов. Эти средства очень удобны для изучения VBA, поскольку позволяют автоматически создать процедуру, включив запись макроса, выполнив необходимые действия и остановив запись. Тогда все действия пользователя, выполняемые после включения записи и до ее остановки, преобразуются в текст процедуры VBA. Затем этот текст можно просмотреть и отредактировать с помощью редактора VBA. В Microsoft Access средств автоматической записи макросов нет так же, как нет и средств автоматической генерации кода VBA (за исключением того, что создают мастера).

Создание групп макросов

При разработке приложения с использованием макросов количество макросов может оказаться очень большим. Поэтому важно хорошо организовать доступ к нужным макросам. Для этого в одном объекте Макрос (Macro) можно объединить несколько макросов. Например, рекомендуется все макросы, связанные с событиями в форме или отчете, объединить в отдельный объект, соответствующий данной форме или отчету. Для того чтобы можно было это сделать, каждый макрос группы должен иметь свое имя, а имя объекта Макрос (Macro) будет являться именем группы макросов.

Чтобы создать группу макросов:

  1. Откройте Конструктор макросов одним из тех способов, которые были описаны в предыдущем разделе.
  2. Нажмите кнопку Имена макросов (Macro Name) на панели инструментов. На панели описаний в окне Конструктора появится еще один столбец - «Имя макроса» (Macro Name) (рис. 11.3).
  3. В этот столбец введите имя первого макроса. Остальные поля данной строки лучше оставить пустыми - это облегчит перемещение и копирование макрокоманд.
  4. Начиная со следующей строки, введите все макрокоманды макроса и соответствующие аргументы для каждой макрокоманды.
  5. Пропустите одну строку.
  6. Повторите шаги 3-5 для каждого макроса.

Рис. 11.3. Создание группы макросов

На рис. 11.З в окне Конструктора представлен макрос «Сотрудники» (Employees) базы данных (Northwind). Для указания конца макроса не требуется отдельной макрокоманды. Access продолжает выполнение макроса, входящего в группу, пока не обнаружит строку, содержащую имя в столбце «Имя макроса» (Macro Name), либо пока не дойдет до последней строки окна макросов.

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

Для запуска одного из макросов группы используется полное имя для ссылки на макрос. Полное имя макроса формируется таким образом: имяГруппы.имяМакроса.

Замечание

Можно настроить систему так, чтобы столбец Имя макроса (Macro Name) выводился всегда в Конструкторе макросов. Для этого необходимо установить соответствующие параметры на вкладке Вид (View) в диалоговом окне Параметры (Options) (см. разд. «Настройка параметров приложения Access»гл. 14).

Применение условий в макросах

В примерах макросов, которые мы приводили раньше, использовался последовательный порядок выполнения макрокоманд. Однако, как и в любой программе, порядок выполнения макрокоманд в макросе может быть изменен. Для этого вводятся условия выполнения или пропуска макрокоманд. Эти условия задаются в виде выражений в специальном столбце, который появляется в окне Конструктора макросов, если нажата кнопка Условия (Conditions) на панели инструментов (рис. 11.4).

Замечание

Как и в случае с группами макросов, можно настроить параметры системы таким образом, чтобы этот столбец появлялся в Конструкторе макросов всегда.

Рис. 11.4. Применение условий в макросах

На рис. 11.4 приведено окно Конструктора для группы макросов «Наклейки для клиентов» (Customer Label Dialog), используемой для печати отчета в виде наклеек на конверты. Причем можно напечатать наклейки сразу для всех клиентов или для клиентов одной страны, выбранной из списка. В окне виден столбец «Условие» (Condition). Если условие, заданное в этом столбце, истинно, выполняется макрокоманда, находящаяся в этой строке. Если условие ложно, соответствующая макрокоманда пропускается и выполняется следующая.

Если требуется при истинности условия выполнить сразу несколько макрокоманд, то для всех макрокоманд, кроме первой, в столбце «Условие» (Condition) ставится многоточие (…). Условие, которое должно проверяться, пишется в строке первой макрокоманды. Тогда, если оно истинно, выполняется весь набор макрокоманд от этого условия и до следующей макрокоманды с заданным условием, до следующего макроса или до конца макроса. Если условие ложно, пропускаются все команды, помеченные многоточием, включая макрокоманду с заданным условием. Далее выполняется макрокоманда, следующая за пропущенными, в которой содержится новое условие или поле «Условие» (Condition) не заполнено. Таким образом, в отличие от «большинства языков программирования, в макросах нет альтернативного ветвления. Для того чтобы создать макрос с двумя альтернативными ветвями, нужно сначала ввести условие и определить макрокоманды, исполняемые при выполнении этого условия. Сразу после них необходимо указать обратное условие и определить макрокоманды, исполняемые в альтернативной ветви. Затем можно ввести макрокоманды, которые исполняются безусловно. Такой способ ветвления используется, например, в макросе «Просмотр» (Preview), который связан с кнопкой Просмотр (Preview) в данной форме. Если пользователь выбрал вариант для всех стран (АН Countries), что определяется значением 1 элемента управления ПечатьНаклеек (PrintLabelFor), то отчет открывается в режиме Предварительного просмотра и форма закрывается. Если выбран переключатель для конкретной страны (Specific Country)», а страна не выбрана (значение поля со списком «ВыборСтраны» (SelectCountry) не задано), то выдается сообщение, фокус устанавливается в поле со списком для выбора страны и выполнение макроса прекращается. Если страна задана, то отображается отчет для выбранной страны и форма закрывается.

В этом макросе используется макрокоманда ОстановитьМакрос (StopMacro). Она позволяет прекратить выполнение макроса, при этом все макрокоманды, следующие по порядку за макрокомандой ОстановитьМакрос (StopMacro), не будут выполняться.

Замечание

Макрокоманду ОстановитьМакрос (StopMacro) имеет смысл использовать, только если за ней идут другие макрокоманды, которые не следует выполнять при некотором условии. Как уже было сказано выше, для указания конца макроса специальной макрокоманды не требуется.

Выполнение и отладка макросов

Способов запуска макросов очень много. Среди них есть прямые способы, когда макрос запускается непосредственно пользователем. Эти способы используются обычно при тестировании макросов. Когда макрос отлажен, создают специальную команду меню или кнопку на панели инструментов или связывают макрос с каким-либо событием в форме или отчете. В данном разделе мы рассмотрим все возможные способы запуска макроса.

Универсальным способом запуска макроса является использование команды меню (Tools, Macro, Run Macro) (рис. 11.5).

В появившемся при выборе этой команды диалоговом окне нужно указать (ввести или выбрать из списка) полное имя макроса, т. е. имяГруппы.имяМакроса (рис. 11.6). Этот способ позволяет выполнить макрос из любого активного окна, будь то окно макросов, окно базы данных или, например, Конструктор форм.

Рис. 11.5.

Рис. 11.6. Диалоговое окно Запуск макроса

Запуск макроса из окна Конструктора макросов

Этот способ применяется для тестирования только что созданного или исправленного макроса. Если макрос в окне Конструктора макросов один, то для его запуска нужно просто нажать кнопку Запуск (Run) на панели инструментов или выбрать команду Запуск, По шагам (Run, Single Step) (последний способ позволяет отладить макрос). Однако, если макросов несколько, то с помощью этой кнопки или команды можно запустить только первый макрос в группе. Чтобы запустить любой другой макрос из группы, нужно воспользоваться командой меню Сервис, Макрос, Выполнить макрос (Tools, Macro, Run Macro).

Если вы часто используете этот способ запуска макроса, имеет смысл настроить панель инструментов, добавив на нее стандартную кнопку Запуск (Run Macro). Она эквивалентна выполнению команды меню Сервис, Макрос, Выполнить макрос (Tools, Macro, Run Macro). (0 настройке панелей инструментов см. разд. «Создание и изменение панелей инструментов»гл. 14.)

Запуск макроса из окна базы данных

Чтобы запустить макрос из окна База данных (Database), щелкните по ярлыку Макросы (Macros) на панели объектов, найдите в списке нужный макрос и дважды щелкните по нему кнопкой мыши или нажмите кнопку Запуск (Run) на панели инструментов окна База данных. Последний способ подходит, только если в выбранном объекте содержится один макрос. В противном случае нужно воспользоваться универсальным способом выполнения макроса, описанным выше.

Замечание

Если в условиях или аргументах макрокоманд есть ссылки на объекты Access - формы, отчеты и пр., - они должны быть открыты перед запуском макроса, в противном случае будут выдаваться сообщения об ошибках.

Запуск макроса с помощью кнопки на панели инструментов

Прямые способы запуска макросов являются простыми, но не самыми быстрыми. Существуют более удобные и быстрые способы. Наиболее удобный с нашей точки зрения способ запуска макроса - это создание специальной кнопки на панели инструментов. Правда, стандартных панелей инструментов в Access много, и в разных режимах работы на экране появляются соответствующие панели. Поэтому наиболее разумным является создание специальной панели инструментов, на которую вы можете поместить все нужные кнопки. Тем не менее операция добавления специальной кнопки на стандартную панель инструментов чрезвычайно проста.

Чтобы добавить кнопку на стандартную панель инструментов Access:

  1. Щелкните правой кнопкой мыши по панели инструментов и выберите в контекстном меню команду Настройка (Customize).
  2. Настройка (Customize) раскройте вкладку Панели инструментов (Toolbars).
  3. Установите флажок для одной из стандартных панелей инструментов, например Запрос в режиме таблицы (Query Datasheet), чтобы она отобразилась на экране.
  4. Закройте диалоговое окно Настройка (Customize), нажав кнопку Закрыть (Close).
  5. Щелкните по ярлыку Макросы База данных (Database) и найдите нужный макрос.
  6. Перетащите макрос с помощью мыши на панель инструментов Запрос в режиме таблицы (Query Datasheet).

Рис. 11.7. Создание кнопки на панели инструментов для запуска макроса

Замечание

Если основной режим работы в вашем приложении - работа с формами, кнопки выполнения макросов можно поместить на панель инструментов Режим формы (Form View).

Чтобы удалить с экрана панель инструментов, на которую вы только что добавили кнопку, щелкните правой кнопкой мыши в области панелей инструментов и в списке стандартных панелей команд снимите флажок слева от названия панели (рис. 11. 8).

Рис. 11.8. Контекстное меню со списком панелей команд

Теперь рассмотрим создание специальной панели инструментов и размещение на ней кнопки вызова макроса.

  1. Щелкните по ярлыку Макросы (Macros) на панели объектов в окне База данных (Database) и выделите нужный макрос.
  2. Выберите команду (Tools, Macro, Create Toolbar from Macro). На экране появляется пустая панель инструментов.
  3. Перетащите с помощью мыши нужный макрос на эту панель.

На панели появляется кнопка с уже знакомым значком макроса. Кнопка получает такое же название, как имя макроса, для которого она создана.

Если нужно создать панель инструментов для вызова нескольких макросов, мы рекомендуем объединить эти макросы в одну группу (создание группы макросов было описано в предыдущем разделе). Тогда при выполнении команды меню Сервис, Макрос, Создать панель инструментов из макроса (Tools, Macro, Create Toolbar from Macro) будет создана панель инструментов, на которой каждому макросу группы будет соответствовать своя кнопка. При этом на кнопках отображаются имена соответствующих макросов. Новая панель инструментов получает такое же имя, как имя группы макросов. Попробуйте выполнить эту команду для одной из групп макросов в базе данных «Борей» (Northwind), например «Клиенты» (Customers). При желании можно заменить текст на кнопках значками. Дополнительная информация о настройке панелей инструментов приложения, и, в частности, об удалении кнопок с панелей и удалении самих панелей, изменении вида этих кнопок, представлена в

Запуск макроса с помощью команды меню

Еще одним распространенным способом запуска макроса является запуск с помощью специально созданной для этого команды меню. Способы создания команд меню для запуска макросов очень похожи на те, что применяются для создания кнопок на панели инструментов. Например, можно воспользоваться для этого командой меню Сервис, Макрос, Создать меню из макроса (Tools, Macro, Create Menu from Macro).

Более подробно создание и настройка пользовательских меню рассматриваются в разд. «Создание и изменение панелей команд»гл. 14. Поэтому в данном разделе мы не будем рассматривать создание команды меню из макроса.

Запуск макроса с помощью комбинации клавиш

Для запуска макроса можно назначить комбинацию клавиш. Для этого необходимо создать специальную группу макросов - «AutoKeys». Эта группа макросов должна для каждой назначенной вами комбинации клавиш содержать макрокоманду запуска соответствующего макроса. Пример группы макросов «AutoK»eys приведен в базе данных «Борей». Откройте эту группу макросов в режиме Конструктора. Она содержит один макрос (рис. 11.9). Имя макроса- это запись комбинации клавиш +

Сам макрос состоит из одной макрокоманды ЗапускМакроса (RunMacro), которая запускает макрос «Телефоны клиентов. Печать» (Customer Phone List.Print). Макрос «AutoKeys» просматривается каждый раз, когда пользователь вводит специальные комбинации клавиш, например +

Если введенная комбинация клавиш найдена в «AutoKeys», то запускается соответствующий макрос.

Рис. 11.9. Пример макроса «AutoKeys»

Этот способ запуска макроса, безусловно, является самым быстрым, однако он имеет существенный недостаток: свободных комбинаций клавиш очень немного. И хотя комбинации, определенные в «AutoKeys», имеют более высокий приоритет, чем стандартные (например, + - копировать), заменять стандартное назначение комбинаций клавиш не рекомендуется. Разрешенные комбинации клавиш приведены в табл. 11.2. Комбинации с клавишей в данном случае не применяются, т. к. используются для запуска команд меню и нажатия кнопок.

Таблица 11.2. Разрешенные комбинации клавиш

Запуск макроса при открытии базы данных

При открытии базы данных Microsoft Access могут выполняться некоторые действия. Чаще всего это открытие специальной формы, так называемой Главной кнопочной формы, вывод специальных меню или панелей инструментов, скрытие стандартных меню и т. д. Для определения этих действий используется диалоговое окно Параметры запуска (Startup). Однако иногда требуется при запуске приложения выполнить более сложный набор действий, чем тот, что позволяет задать это диалоговое окно. Например, может потребоваться заранее открыть несколько форм (не показывая их на экране), чтобы потом их отображение не занимало много времени, проверить некоторые условия или запросить ввод некоторых данных. Все это можно сделать с помощью специального макроса, который называется «AutoExec». При открытии базы данных Access проверяет наличие этого макроса и, если он существует, выполняет его. При создании макроса «AutoExec» следует помнить, что Access сначала выполнит действия, определенные в окне Параметры запуска (Startup), а затем - макрос «AutoExec», поэтому в них не должно быть противоречивых действий.

Запуск макроса из другого макроса

Иногда требуется вызвать макрос из другого макроса. Это можно сделать с помощью макрокоманды ЗапускМакроса (RunMacro). Мы уже встречались с этой макрокомандой при описании макроса «AutoKeys». Здесь нужно отметить, что эта макрокоманда имеет три аргумента: кроме имени макроса, задается число повторов выполнения макрокоманды и условие повтора. Таким образом, эта макрокоманда позволяет организовывать циклы. Аргумент Число повторов (Repeat Count) задает количество вызовов макроса. Аргумент Условие повтора (Repeat Expression) является выражением, которое может принимать значение Истина или Ложь. Перед выполнением макрокоманды ЗапускМакроса (RunMacro) проверяется значение этого выражения. Если оно Истина, то макрос выполняется, если Ложь, то макрос не выполняется и управление передается следующей макрокоманде. Если эти два аргумента не заданы, макрос выполняется только один раз. Если заданы оба эти аргумента, цикл вызова прекращается, когда макрос выполнился заданное число раз либо когда заданное условие окажется невыполненным и получит значение Ложь.

Замечание

Имя макроса в аргументе макрокоманды ЗапускМакроса (RunMacro) должно быть полным, т. е. должно иметь вид имяГруппы. имяМакроса, даже если вызываемый макрос находится в той же группе, что и вызывающий. Если условие повтора задано таким образом, что оно всегда истинно, то цикл окажется бесконечным. Можно прервать его с помощью комбинации клавиш +. Если это не поможет, придется прервать работу Access, нажав комбинацию клавиш ++.

Назначение макроса событию

Наиболее часто макросы используются в приложении Access для обработки событий. Событие - это любое действие, распознаваемое объектом, и можно определить реакцию объекта на событие. События происходят в результате действий пользователя, выполнения инструкций VBA или генерируются системой. Примером событий является вывод на экран формы, отчета, ввод данных в текстовое поле, нажатие кнопки мыши или клавиши. Каждому из этих событий можно назначить макрос или процедуру VBA, которые будут автоматически выполняться в ответ на произошедшее событие. Практически все программирование в Access сводится к написанию макросов или процедур, обрабатывающих события, т. е. программируется реакция объектов на события. Существует большое количество различного рода событий, на которые реагируют объекты, причем часто возникает не одно, а целая последовательность событий. Поэтому необходимо обладать определенным умением, чтобы решить, какому событию следует назначить созданный вами макрос или процедуру VBA. Все тонкости этого выбора будут обсуждаться в разд. «Программирование в формах и отчетах» гл. 13 . Здесь мы опишем только способ назначения макроса событию и приведем примеры обработки событий с помощью макросов.

Начнем с самого простого. Откроем форму «Клиенты» (Customers) в базе данных «Борей». В этой форме отображается информация о клиенте. Допустим, мы хотели бы видеть не только эту информацию, но и данные о купленных клиентом продуктах. Было бы хорошо создать кнопку Заказы клиента, при нажатии которой появлялась бы форма «Заказы» (Orders) с заказами только того клиента, который в данный момент выбран в форме «Клиенты» (Customers). Для того чтобы получить желаемое, создадим макрос, который будет выполняться, когда произойдет событие Нажатие кнопки (On Click) в форме «Клиенты» (Customers).

Чтобы создать макрос, определяющий описанную реакцию приложения на событие Нажатие кнопки (OnClick):

  1. Откройте форму «Клиенты» (Customers) в режиме Конструктора.
  2. Создайте кнопку в области заголовка формы. При этом кнопка мастера на панели элементов должна быть отжата, т. к. в противном случае вам будет предложено создать процедуру обработки событий, а не макрос.
  3. Откройте окно свойств только что созданной кнопки, если оно еще не открыто, и раскройте вкладку События (Event).
  4. Обратите внимание, сколько разных событий связано только с командной кнопкой. Помимо обычного нажатия, которое мы сейчас и будем использовать, в набор событий кнопки входят получение и потеря фокуса, двойной щелчок кнопкой мыши, простое перемещение указателя мыши над кнопкой и пр. Такое многообразие событий дает разработчику большие возможности по созданию удобного интерфейса пользователя. Теперь найдите в списке событие Нажатие кнопки (On Click) и установите курсор в соответствующую ячейку. Это поле со списком, и в данный момент оно пустое. Если открыть этот список, то первым его элементом будет (), а далее идет перечень всех макросов, существующих в приложении (рис. 11.10).
  5. Поскольку нужного нам макроса в списке нет, давайте его создадим. Для этого нажмите кнопку Построителя, находящуюся справа от поля. Появится окно Построитель (Choose Builder), в котором предлагается выбрать один из трех Построителей: Выражения (Expression Builder), Макросы (Macro Builder) и Программы (Code Builder) (рис. 11.11).
  6. Выберите Макросы (Macro Builder) и нажмите кнопку ОК. Откроется»окно макросов и диалоговое окно, в которое нужно ввести имя создаваемого макроса. Введите имя Заказы клиента.

Рис. 11.10. Диалоговое окно свойств кнопки

Рис. 11.11. Диалоговое окно Последовательность перехода

  1. В макрос нужно добавить единственную макрокоманду ОткрытьФорму (OpenForm). Значения аргументов этой макрокоманды приведены в табл. 11.З.

Таблица 11.3. Значения аргументов макрокоманды ОткрытьФорму (OpenForm)

Аргумент Режим (View) определяет режим, в котором форма должна быть открыта. Он может принимать значения: Форма (Form), Конструктор (Design), Просмотр (Print Preview), Таблица (Datasheet), Сводная таблица (PivotTable) и Сводная диаграмма (Pivot Chart). Аргумент Условие отбора (Condition) определяет условие для отбора записей, отображаемых в форме. Условие представляет собой выражение. В данном случае это выражение содержит ссылку на элемент управления КодКлиента (CustomerlD) в форме «Клиенты» (Customers), что позволяет выбрать все записи из таблицы «Заказы» (Orders), в которых код клиента равняется значению, заданному в поле «КодКлиента» (CustomerID) формы «Клиенты» (Customers). (Подробнее об использовании ссылок в макросах и выражениях будет рассказано в разд. «Применение макросов» данной главы.) Аргумент Режим данных (Data Mode) определяет способ работы с данными и может принимать одно из значений: Добавление (Add), Изменение (Edit) или Только чтение (Read Only). И наконец, аргумент Режим окна (Window Mode) определяет тип окна: Обычное (Normal), Невидимое (Hidden), Значок (Icon) и Окно диалога (Dialog).

  1. Закройте окно макроса, сохранив изменения. В окне свойств кнопки в поле Нажатие кнопки (On Click) появится имя макроса «Заказы клиента».
  2. Раскройте вкладку Макет (Format) и введите в поле Подпись (Caption) название кнопки: Заказы клиента. То же самое имя рекомендуется ввести в поле Имя (Name) на вкладке Другие (Other).

Теперь остается перейти в режим Формы и проверить, как макрос отрабатывает событие Нажатие кнопки (On Click). Если вы нигде не ошиблись, то должны увидеть на экране картинку, похожую на ту, что изображена на рис. 11.12.

Рис. 11.12. Форма «Заказы»

Однако мы выполнили еще не все необходимые действия. Если перейти к следующей записи в форме «Клиенты» (Customers), данные в форме «Заказы» (Orders) уже не будут правильно отражать ситуацию - они не меняются. Нужно сделать так, чтобы эти данные изменялись синхронно с переходом к другим записям в форме «Клиенты» (Customers) либо чтобы это окно просто закрывалось. Рассмотрим реализацию второго варианта. Форма «Заказы» (Orders) открывается, когда мы нажимаем кнопку Заказы клиента, и становится активной. Требуется сделать так, чтобы она закрывалась, когда активной становится форма «Клиенты» (Customers). Для этого нужно выбрать соответствующее событие и задать процедуру или макрос его обработки. Если вы откроете окно Свойства (Properties) формы «Клиенты» (Customers) и раскроете вкладку События (Event), то среди множества событий увидите событие Включение (On Activate). Это как раз то событие, которое нам нужно. Выберем это событие, но теперь мы не будем создавать новую группу макросов, а добавим новый макрос в группу макросов «Клиенты» (Customers), которая уже содержит макросы для формы «Клиенты» (Customers). Выберите эту группу макросов в раскрывающемся списке и нажмите кнопку Построителя. Откроется окно, в котором отобразятся два макроса. Добавим к ним еще один макрос. Назовем его «Закрытие» и введем макрокоманду Закрыть (Close) с соответствующими параметрами (табл. 11.4). Но перед закрытием формы необходимо проверить, открыта ли она. Для этого воспользуемся функцией isLoaded, которая возвращает значение Истина, если форма открыта, и Ложь - в противном случае. В качестве аргумента в функцию isLoaded нужно передать имя формы. Итак, в столбец Условие (Condition), напротив макрокоманды Закрыть (Close), введите IsLoaded(«Заказы») (или IsLoaded («Orders»)).

Аргумент Значение
Тип объекта (Object Type) Форма (Forms)
Имя объекта (Object Name) Заказы (Orders)
Сохранение (Save) Нет (No)

Таблица 11.4. Значения аргументов макрокоманды Закрыть (Close)

Аргумент Сохранение (Save) позволяет определить, будет ли Access при закрытии формы отображать диалоговое окно для подтверждения сохранения измененных данных. Поскольку мы открывали форму «Заказы» (Orders) в режиме только для чтения, изменение данных запрещено, поэтому данному аргументу необходимо присвоить значение Нет (No). Готовый макрос показан на рис. 11.13.

Закройте окно макроса, сохранив изменения. Измените имя макроса, назначенного событию Включение (On Activate). Для этого выберите в списке или введите имя Клиенты.Закрыть (Customers.Close) и нажмите клавишу . Теперь сохраните форму, перейдите в режим Формы и проверьте, как работают созданные вами макросы.

Рис. 11.13. Макрос для закрытия формы

Вызов макроса из процедуры VBA

Как мы уже говорили, процедуры VBA и макросы в Access являются объектами близкими и часто взаимозаменяемыми, т. е. вместо макроса можно использовать процедуру VBA и наоборот. Существуют способы запуска макроса из процедуры VBA, запуска процедуры VBA из макроса, кроме того, Access позволяет преобразовать макрос в процедуру VBA. Такое преобразование описано в разд. «Преобразование макросов в процедуры VBA» данной главы.

Для запуска процедуры VBA из макроса существует специальная макрокоманда ЗапускПрограммы(КипСоdе). Эта макрокоманда имеет один аргумент - имя вызываемой процедуры, хотя вызываться может только функция, а не подпрограмма.

Для запуска макроса из процедуры VBA применяется специальный метод ЗапускМакроса (RunMacro) объекта DoCmd, например:

DoCmd.RunMacro «Макрос!».

Объект DoCmd используется в процедуре VBA для выполнения макрокоманд Access. При этом английское имя нужной макрокоманды должно быть указано в качестве Метода объекта DoCmd, например строка процедуры

DoCmd.OpenForm «Клиенты»

позволяет открыть форму «Клиенты». Здесь «Клиенты»- аргумент макрокоманды. Аргументы перечисляются в предложении DoCmd через запятую. Таким способом может быть выполнено большинство макрокоманд.

Создание процедур VBA мы рассмотрим ниже, в гл. 13.

Отладка макросов и поиск ошибок

Обычно для отладки макроса его выполняют в пошаговом режиме. Для включения этого режима необходимо нажать кнопку По шагам (Single Step) на панели инструментов в окне Конструктора макросов или выбрать команду меню Запуск, По шагам (Run, Single Step). Тогда перед выполнением каждой макрокоманды будет появляться диалоговое окно (Macro Single Step) (рис. 11.14).

В этом окне отображаются имя макроса, имя исполняемой макрокоманды, условие ее исполнения и аргументы. При этом в полях Условие (Condition) и Аргументы (Arguments) видны значения условного выражения и аргументов макрокоманды. Если в строке макрокоманды условие не указано, в поле Условие (Condition) всегда будет показываться значение Истина (True). Кнопки справа от полей в этом окне позволяют выполнить очередную макрокоманду, прервать выполнение макроса (например, если видно, что аргументы вычислены неправильно) и продолжить выполнение в обычном режиме, т. е. не по шагам.

Рис. 11.14. Диалоговое окно Пошаговое исполнение макроса

Если в процессе выполнения макроса возникла ошибка, появляется диалоговое окно Ошибка выполнения макроса (Action Failed), аналогичное окну Пошаговое исполнение макроса (Macro Single Step), но без возможности продолжить процесс (кнопки Шаг (Step) и Продолжить (Continue) недоступны). Можно только прервать выполнение макроса, нажав кнопку Прервать (Halt). В окне отображается макрокоманда, содержащая ошибку.

Поиск ошибок в макросах, как правило, не вызывает больших затруднений. Это связано с тем, что:

  • большинство синтаксических ошибок проверяется при вводе и система просто не даст ввести неправильное название макрокоманды или условное выражение (правда, она не защитит от ввода неправильного имени объекта, например несуществующей формы или элемента управления в форме);
  • макросы, как правило, достаточно просты и не содержат длинных последовательностей макрокоманд, в противном случае лучше написать процедуру на VBA, т. к. язык VBA предоставляет больше возможностей и имеет существенно лучшие средства отладки.

Основные ошибки, которые возникают в макросах, связаны либо с неправильным вводом имен объектов, и тогда Access не может найти соответствующий объект, либо с тем, что объекты, на которые ссылается макрокоманда, недоступны, например форма не открыта. Поэтому при возникновении ошибки в первую очередь нужно проверить, правильно ли введены имена объектов и открыты ли формы, использованные в условиях или аргументах макрокоманд.

Совет

Прежде чем использовать ссылки на форму или элемент управления, рекомендуется выполнять проверку, открыта ли форма, с помощью функции isLoaded(). К сожалению, эта функция не является стандартной функцией Access, а обычно включается в модуль «Служебные функции» (Utility Function) базы данных «Борей». Вы можете скопировать ее оттуда в свою базу данных.

Стандартным приемом отладки как процедур, так и макросов, является вывод на экран специальных сообщений, говорящих о прохождении определенных этапов процесса. В макросах это осуществляется путем вставки дополнительных макрокоманд ВыводСообщения (MsgBox) для отображения таких сообщений. Причем в сообщении можно вывести значения свойств элементов управления, например: «Цена товара = » & Forms!Товары!Цена

Можно легко отключить вывод на экран отладочных сообщений, для чего введите в столбец «Условия» (Condition) напротив соответствующих макрокоманд значение Ложь.

Еще один стандартный прием - установка точек останова. Его применяют для того, чтобы остановить выполнение макроса в определенной точке до завершения процесса. Для этого используется макрокоманда ОстановитьМакрос (StopMacro). Макрос будет выполняться до макрокоманды ОстановитьМакрос (StopMacro), после этого можно проверить результаты. Таким образом, можно локализовать ошибку с точностью до макрокоманды.

Применение макросов

Макросы могут применяться для решения самых разнообразных задач. В первом разделе данной главы мы привели таблицу макрокоманд, сгруппированных по категориям. Теперь рассмотрим применение макрокоманд некоторых категорий.

Работа с данными в формах и отчетах

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

Ссылки на формы, отчеты и их свойства

Чтобы задать ссылку на форму или отчет, нужно сначала определить, в какое семейство (collection) входит объект, на который создается ссылка. (Подробнее о семействах и составляющих их объектах см. гл. 13) Все открытые формы входят в семейство Формы (Forms), а открытые отчеты - в семейство Отчеты (Reports). Полная ссылка на форму или отчет должна состоять из двух частей: имяСемейства!имяОбъекта. Причем если имя объекта содержит пробелы или специальные символы, то его нужно заключить в квадратные скобки. Если пробелы в имени не используются, скобки можно не ставить. Таким образом, ссылка на форму будет выглядеть так: Forms![Заказы клиента] ИЛИ Forms!Клиенты Для отчета ссылки выглядят аналогично:

Reports! [Отчет о продажах] ИЛИ Reports!Прайс-лист Ссылка на свойство формы или отчета состоит из трех частей: имяСемейства!имяОбъекта.имяСвойства Например:

Forms!Клиенты.Visible или Reports![Продажи за период].MenuBar Свойство Вывод на экран (Visible) определяет, будет ли форма видна на экрану или спрятана, а свойство Меню (MenuBar) позволяет связать с отчетом или формой специальное меню.

Ссылки на элементы управления форм, отчетов и их свойства

Чтобы создать ссылку на элемент управления или его свойство, необходимо указать его имя. Если имя содержит пробелы, оно заключается в квадратные скобки. Ссылка на элемент управления в форме или отчете состоит из трех частей:

ИмяСемейства!имяОбъекта!имяЭлемента

Forms![Заказы клиента]![Номер заказа]

Reports![Продажи за период]![Сумма]

имяСемейства!имяОбъекта!имяЭлемента.имяСвойства

Например:

Forms![Заказы клиента]![Номер заказа].Enabled

Свойство Доступ (Enabled) позволяет запретить или разрешить доступ к элементу управления.

Объект может иметь свойство, используемое по умолчанию. Это свойство применяется в том случае, когда имя свойства в ссылке явно не указано. Например, у элементов управления по умолчанию используется свойство Значение (Value), поэтому ссылка Forms! Товары! Цена позволяет получить доступ к значению, отображенному в текстовом поле «Цена».

Ссылки на подчиненные формы и отчеты

На подчиненную форму или отчет можно ссылаться так же, как и на любой другой элемент управления, т. к. подчиненная форма и подчиненный отчет являются одним из типов элементов управления. Например:

Forms!Заказы!ПодформаТовары

Здесь ПодформаТовары - это имя элемента управления в форме «Заказы», который представляет собой подчиненную форму.

А вот ссылка на элемент управления в подчиненной форме или отчете имеет особую структуру: после имени элемента управления, который является подчиненной формой, нужно сначала указать специальное свойство: Form - для форм или Report - для отчетов, а затем имя элемента управления, на который выполняется ссылка:

Forms!Заказы!ТоварыПодформа.Form![Код Товара]

Фильтрация записей в формах, отчетах, таблицах

Перейдем к примерам применения макрокоманд Access. Для отбора записей в формах, отчетах, таблицах используется макрокоманда Приме нить Фильтр (ApplyFilter). Задать фильтр можно двумя способами: либо указав имя заранее созданного фильтра в аргументе Имя фильтра (Filter Name), либо непосредственно задав условие выборки в аргументе Условие отбора (Where Condition). Если фильтр нужно применить сразу при открытии формы, тогда с событием Открытие (On Open) формы необходимо связать макрос, содержащий макрокоманду ПрименитьФильтр (ApplyFilter). Если нужно менять набор отображаемых записей в открытой форме динамически, поступают следующим образом:

  • создают в этой форме набор полей, в которых можно задать условия отбора;
  • создают кнопку Применить фильтр, с которой связывают макрос, содержащий макрокоманду ПрименитьФильтр (ApplyFilter). В качестве значения аргумента Условие отбора (Where Condition) для этой макрокоманды указывают выражение, содержащее ссылки на эти поля.

Пример такого решения приведен на рис. 11.15. На этом рисунке представлена форма «Товары» (Products), позволяющая просматривать товары с выборкой по различным критериям.

Эта форма построена на основе таблицы «Товары» (Products) с помощью Мастера автоматической генерации ленточных форм. Затем в режиме Конструктора форм к ней добавлены поля для определения критериев выбора и кнопки для применения и отмены фильтра. Соответствующие макросы, связанные с событием Нажатие, кнопки (On Click), приведены на рис. 11.16. Для отмены фильтра используется макрокоманда ПоказатьВсеЗаписи(ShowAllRecords).

Рис. 11.15. Форма для отбора записей по заданным критериям


Рис. 11.16. Макросы для установки и отмены фильтра в форме «Товары»

На рис. 11.16 представлено два макроса: УстановитьФильтр и Отменить Фильтр. В диалоговом окне Область ввода (Zoom) отображено значение аргумента Условие отбора (Where Condition) макрокоманды ПрименитьФильтр (ApplyFilter). Обратите внимание, условие получилось довольно сложным, а длина поля Условие отбора (Where Condition) ограничена 255 символами. Поэтому, если бы мы включили в условия отбора еще одно поле, например «Поставки прекращены», нам пришлось бы отдельно создать специальный фильтр и задать его имя в аргументе Имя фильтра (Filter Name).

В макросе «ОтменитьФильтр», кроме макрокоманды ПоказатьВсеЗаписи(ShowAllRecords), нужны еще две макрокоманды, чтобы очистить поля » ВыборПоставщика» и «ВыборТипа», т. е. присвоить им значение Пусто (Null). Это делается с помощью макрокоманды ЗадатьЗначение(SetValue).

Перемещение по данным

Эта группа макрокоманд связана с перемещением по записям и элементам управления. В качестве примера применения макрокоманд этой группы рассмотрим ситуацию, когда пользователь работает с формой «Клиенты» и хочет найти заказ текущего клиента, номер которого ему известен. Давайте вернемся к примеру, приведенному в разд. «Назначение макроса событию». Тогда мы создали.в форме «Клиенты» кнопку Заказы клиента для отображения заказов выбранного клиента. Попробуем усовершенствовать эти формы. Если номер заказа известен пользователю, он может ввести его в текстовое поле Поиск заказа, которое можно добавить в форму «Клиенты» (Customers). Тогда в открываемой форме «Заказы» (Orders) следует сразу показать запись, содержащую соответствующий счет. Добавим поле «Поиск заказа» в заголовок формы и сделаем так, чтобы при открытии формы «Заказы» (Orders) проверялось значение этого поля и, если оно не пустое, производился бы поиск счета с указанным номером и выполнялся переход на соответствующую запись. В противном случае текущей становилась бы первая запись из отфильтрованного набора записей. На рис. 11.17 показана форма «Клиенты» (Customers) с новым полем и макрос «Поиск заказа», который связан с событием (On Load) формы «Заказы» (Orders).

Поскольку добавленный макрос обработки события ссылается на элемент управления в форме «Клиенты» (Customers), он должен выполняться только в том случае, если эта форма открыта, и, кроме того, поиск должен производиться только тогда, когда поле «Поиск заказа» не пусто. Исходя из этого формируются условия макроса. Прежде чем производить поиск записи по образцу в одном из полей, необходимо активизировать это поле, для чего используется макрокоманда КЭлементуУправления(GoToControl) . С ее помощью устанавливается фокус на поле «КодЗаказа» (Orderld). Но это поле в форме «Заказы» (Orders) недоступно, поэтому сначала нужно изменить значение свойства Доступ (Enabled) этого поля. В противном случае выполнение макрокоманды КЭлементуУправления (GoToControl) приведет к возникновению ошибки.

Макрокоманда КЭлементуУправления (GoToControl) используется, как правило», если требуется изменить стандартный порядок перехода между полями в форме. Обычно переход между полями выполняется с помощью клавиши <Таb>, однако иногда требуется пропустить ряд полей и переместить фокус к определенному элементу управления. Это может зависеть от каких-либо условий, например от значения поля. В этом случае на событие После обновления (After Update) для данного прля назначается макрос, который перемещает фокус на нужный элемент управления в форме. В качестве аргумента для макрокоманды необходимо указать короткое имя элемента управления. В случае излишне длинного имени переход к элементу управления не произойдет и отобразится сообщение об ошибке.

Рис. 11.17. Пример макроса для перемещения по данным

Обновление данных в формах и элементах управления

Последняя группа макрокоманд в рассматриваемой категории связана с обновлением данных в активных формах, таблицах и запросах. Если несколько человек в сети одновременно изменяют данные, то формы и таблицы у конкретного пользователя могут не отражать актуальных данных. Для того чтобы отображаемые данные соответствовали текущему состоянию базы данных, их необходимо обновить с помощью команды Записи, Обновить (Record, Refresh) (см. разд.Работа с записями гл. 2).

Похожая ситуация возникает даже в однопользовательском режиме, если в форме используется поле со списком, источником данных для которого является таблица или запрос. Если в исходную таблицу были добавлены записи, то в поле со списком они автоматически не появятся - нужно повторно выполнить запрос. Кроме полей со списком, к элементам управления, требующим обновления отображаемых данных, относятся также списки и элементы управления подчиненной формы, объекты OLE и вычисляемые элементы управления, содержащие статистические функции по подмножеству записей, такие как DLookUp () или DSum ().

Для того чтобы выполнить обновление записей в формах, таблицах или элементах управления, используются макрокоманды Обновление(Requery), ПоказатьВсеЗаписи(ShowAllRecords) И ОбновитьОбъект(RepaintObject).

Макрокоманда Обновление (Requery) обновляет данные в объекте базы данных путем повторного просмотра источника данных. Макрокоманда имеет один аргумент, содержащий имя объекта, который следует обновить. Если обновляется активный объект, например форма, то поле аргумента следует оставить пустым. При этом макрокоманда будет повторно выполнять запрос, указанный в свойстве Источник данных (RecordSource) этой формы.

Рассмотрим пример использования макроса для обновления данных. В форме «Клиенты» (Customers) есть поле со списком «Страна» (Country). Источником данных для этого поля является запрос, который выбирает значения из поля «Страна» (Country) таблицы «Клиенты» (Customers):

SELECT DISTINCT Клиенты.Страна FROM Клиенты;

Если при вводе клиента в таблицу добавляется новое название страны, то в списке эта страна не появится, поскольку запрос будет выполнен повторно только при следующем открытии формы. Чтобы провести обновление списка стран раньше, следует назначить событию После обновления (After Update) формы макрос Клиенты.Обновление списка стран, который состоит из одной макрокоманды Обновление (Requery) со значением аргумента «Страна» (Country) (рис. 11.18).

Рис. 11.18. Назначение макроса событию формы После обновления

Замечание

Макрокоманда Обновление (Requery) обновляет только один объект, поэтому если в форме существуют элементы управления, требующие обновления отображаемых данных, и в макросе, назначенном этой форме, используется макрокоманда Обновление (Requery) с пустым значением аргумента, то обновляться будут только записи в форме. Для каждого такого элемента управления нужно использовать отдельную макрокоманду. Если эта макрокоманда в качестве аргумента содержит имя элемента управления, то при ее выполнении обновляется только данный элемент. Записи в самой форме не обновляются.

С помощью макрокоманды Обновление (Requery) можно обновлять данные и в неактивной форме, точнее, не в той форме, которой назначен макрос. Однако в этом случае сначала необходимо выполнить макрокоманду ВыделитьОбъект(SelectObject), которая перенесет фокус на нужную форму, чтобы ее активизировать (потом фокус можно вернуть обратно).

Макрокоманда ПоказатьВсеЗаписи (ShowAllRecords), как уже отмечалось, отменяет действие фильтра и повторно просматривает источник записей. Ее часто используют для обновления данных в подчиненной форме.

Макрокоманда ОбновитьОбъект (RepaintObject) применяется только к объекту базы данных (к таблице, запросу, форме, отчету, странице, макросу и модулю) и не применяется к элементу управления. Она выполняет немедленное обновление указанного открытого объекта (если имя объекта не задано, обновляется активный объект), хотя при этом не производится повторное выполнение запроса к источнику данных. Обновление объекта не влияет на. отображение новых и удаленных записей, как это происходит при выполнении макрокоманды Обновление (Requery). Обычно макрокоманду ОбновитьОбъект (RepaintObject) применяют для отображения результатов изменения данных с помощью макрокоманд ЗадатьЗначение (SetValue), а также для повторного вычисления значений выражений в вычисляемых элементах управления.

Работа с объектами

Рассмотрим сначала, как используется макрокоманда ЗадатьЗначение (SetValue), которая позволяет устанавливать значения свойств элементов управления в формах и отчетах. Мы уже использовали эту макрокоманду в предыдущих примерах.

Установка свойств элементов управления позволяет динамически, в зависимости от условий, делать эти элементы недоступными или невидимыми. Вот несколько примеров.

  • Можно создать одну форму, в которой в зависимости от определенных условий, видимыми будут разные поля. Это позволяет использовать одну форму в нескольких случаях и не создавать для каждой ситуации дополнительную форму. Когда форм в приложении очень много, такая возможность становится очень полезной. Чтобы сделать элемент управления невидимым, следует задать значение Ложь (False) для свойства Вывод на экран (Visible) этого элемента. Чтобы показать элемент управления на экране, задайте для этого свойства значение Истина (True).
  • В зависимости от текущего состояния работы с данными можно изменять доступность кнопок, предназначенных для выполнения определенных действий, или других элементов управления в форме. Чтобы сделать элемент управления недоступным, задайте значение Ложь (False) его свойству Доступ (Enabled). Чтобы элемент управления стал доступным, задайте значение Истина (True) для этого свойства.
  • Можно запретить пользователю изменять данные в форме. Для этого свойству Доступ (Enabled) соответствующих полей следует присвоить значение Ложь (False), а свойству Блокировка записей (Locked) - значение Истина (True). Если необходимо запретить изменение во всех полях, установите значение Ложь (False) для следующих свойств формы: Разрешить изменения (Allow Edits), Разрешить добавление (Allow Additions), Разрешить удаление (Allow Delitions). Эти свойства можно изменять динамически, т. е. в процессе работы пользователя с формой. Например, можно разрешить или запретить редактирование данных после проверки прав пользователя.
  • С помощью макрокоманды ЗадатьЗначение (SetValue) можно динамически изменять значение свойства Источник записей (RecordSource) для формы, что позволяет управлять содержанием отображаемых данных.

Существуют макрокоманды для открытия «и закрытия объектов Access:

ОткрытьФорму(OpenForm), ОткрытьЗапрос(OpenQuery), ОткрытьОтчет(OpenReport) и т. д. Для открытия объекта каждого типа применяется отдельная макрокоманда, а для закрытия объекта используется общая для объектов всех типов макрокоманда Закрыть (Close). Тип объекта, к которому следует применить эту макрокоманду, указывается в качестве одного из ее аргументов. В предыдущих примерах уже использовались макрокоманды ОткрытьФорму(OpenForm) и Закрыть(Close) для активного объекта.

Макрокоманда ОткрытьЗапрос (OpenQuery) позволяет выполнить любой тип запроса, в том числе запрос на изменение данных. Если в качестве аргумента этой макрокоманды задается имя запроса на выборку или перекрестного запроса, то результатом выполнения макрокоманды будет вывод на экран выбранных записей. Если же аргумент - имя запроса на изменение данных, то макрокоманда выполнит запрос, изменяя соответствующим образом данные в таблицах.

При выполнении запроса, изменяющего данные, на экране будут отображаться предупреждающие сообщения. Чтобы отключить вывод этих сообщений, используйте макрокоманду УстановитьСообщения (SetWarnings) со значением аргумента Нет (No). Только не забудьте после выполнения запроса снова включить вывод системных сообщений, применив ту же макрокоманду, но с аргументом Да (Yes). Иначе в Access не будут отображаться никакие системные сообщения, что может привести к выполнению нежелательных действий в приложении.

Макрокоманда ОткрытьПредставление (OpenView) аналогична макрокоманде ОткрытьЗапрос (OpenQuery), только применяется она в проектах Access 2000 и предназначена для работы с данными, хранящимися на сервере.

Макрокоманда ОткрытьСохраненнуюПроцедуру (OpenStoreProcedure) позволяет выполнить или открыть в режиме редактирования хранимую процедуру сервера.

В данном разделе описаны далеко не все макрокоманды. Для получения полной информации используйте справочную систему Access. Чтобы быстро получить справку:

  1. Выберите команду Справка, Справка по Micrisift Access (Help, Microsoft Access Help).
  2. Раскройте вкладку Мастер ответов (Answer Wizard) и введите в поле Выберите действие (What would you like to do?) имя макрокоманды. Нажмите кнопку Найти (Search).

Преобразование макросов в процедуры VBA

Если вы создали много макросов, а потом решили перейти к программированию на VBA, не следует беспокоиться о том, что придется заново переписывать на VBA все созданные макросы. В Access существует возможность автоматического преобразования макросов в процедуры на VBA. Это касается как макросов, связанных с событиями в формах и отчетах, которые преобразуются в процедуры обработки событий, так и общих макросов, не связанных с формами и отчетами. Все они преобразуются в отдельные стандартные модули.

Давайте попробуем преобразовать в процедуры обработки событий макросы, назначенные событиям формы «Наклейки для клиентов» (Customers Labels Dialog):

  1. Откройте форму «Наклейки для клиентов» (Customers Labels Dialog) в режиме Конструктора.
  2. Выберите команду Сервис, Макрос, Преобразовать макросы формы (Tools, Macro, Convert form’s Macros to Visual Basic).
  3. В диалоговом окне Преобразование макроса формы (Convert form macros) (рис. 11.19) нажмите кнопку Преобразовать (Convert), оставив флажки установленными по умолчанию.

Рис. 11.19. Преобразование макроса в процедуру VBA

  1. Когда преобразование закончится, в форме «Наклейки для клиентов» (Customers Labels Dialog) щелкните правой кнопкой мыши, например по кнопке Отменить, и выберите команду Свойства (Properties).
  2. В диалоговом окне Свойства (Properties) раскройте вкладку События (Events).
  3. В поле для события Нажатие кнопки (On Click) оказалось установленным значение [Процедура обработки событий] (). Щелкните по кнопке Построителя, находящейся справа от поля, - откроется окно редактора VBA с текстом процедуры (рис. 11.20).

Рис. 11.20. Процедура, полученная из макроса

В этой процедуре, полученной из макроса, используются объект DoCmd для выполнения макрокоманды закрытия формы. В соответствии с флажками, установленными в окне Преобразование макроса (Convert Macro), комментарии в макросе были преобразованы в комментарии в процедуре и был добавлен код обработки ошибки, который выдает на экран сообщение об ошибке в случае ее возникновения (см. гл. 13).

Аналогично выполняется преобразование макросов, назначенных событиям отчета.

Теперь рассмотрим преобразование в процедуру VBA макроса, не связанного с событием формы или отчета, например созданного ранее макроса «Менеджеры по продажам».

  1. Щелкните по ярлыку Макросы (Macros) в окне базы данных «Борей». Появится список макросов. Выделите макрос «Менеджеры по продажам».
  2. Выберите команду Сервис, Макрос, Преобразовать макросы (Tools, Macro, Convert Macros to Visual Basic).
  3. Откроется такое же диалоговое окно, как в предыдущем примере (см. рис. 11.19), в котором необходимо нажать кнопку Преобразовать (Convert). После окончания процесса преобразования появится сообщение об успешном завершении процесса преобразования и откроется окно редактора VBA, в котором можно посмотреть полученный код на VBA (рис. 11.21).
  4. Макрос преобразуется в функцию с аналогичным именем Менеджеры_по_продажам (пробелы заменились символами подчеркивания).

Рис. 11.21. Результат преобразования макроса «Менеджеры по продажам»

После преобразования исходный макрос «Менеджеры по продажам» не был удален, а в списке модулей в окне базы данных «Борей» появился новый модуль с именем «Преобразованный макрос - Менеджеры по продажам» (Converted Macro - Менеджеры по продажам).

Существует еще один способ преобразования макросов в модуль VBA:

  1. Выделите макрос «Менеджеры по продажам» в окне базы данных «Борей».
  2. Выберите команду Файл, Сохранить как (File, Save As).
  3. В появившемся диалоговом окне Сохранение (Save As), в раскрывающемся списке Как (As) выберите элемент Модуль (Module) (рис. 11.22) и нажмите кнопку ОК.

Рис. 11.22. Сохранение макроса в виде модуля

Выводы

В этой главе мы познакомили вас с макросами, способами их создания и запуска, привели краткий обзор существующих макрокоманд и показали примеры их использования. Мы не описывали все события в формах и отчетах и их обработку с помощью макросов. Этот материал подробно изложен в гл. 13. Нет необходимости уделять особое внимание обработке событий с помощью макросов, поскольку те же действия можно реализовать в процедурах на VBA.

В заключение хочется еще раз подчеркнуть, что использование макросов позволяет без особых усилий создавать приложения, автоматизирующие многие действия пользователя. Рекомендуется начинать с создания таких приложений, прежде чем углубляться в изучение языка программирования VBA. Однако сложные многопользовательские приложения следует сразу разрабатывать, используя язык программирования VBA, не создавая сложных комбинаций из макросов и модулей.

В Microsoft Access макросы, присоединенные к объектам пользовательского интерфейса, таким как кнопки, текстовые поля, формы и отчеты, называются макросами пользовательского интерфейса. Это позволяет отличить их от макросов данных, которые присоединяются к таблицам. С помощью макросов пользовательского интерфейса можно автоматизировать ряд действий, таких как открытие другого объекта, применение фильтра, запуск операции экспорта и многие другие задачи. В этой статье представлен новый конструктор макросов, а также описаны основные задачи, связанные с созданием макроса пользовательского интерфейса.

Примечание: Эта статья не относится к веб-приложениям Access.

В этой статье

Общие сведения

Макросы могут содержаться в объектах макросов (такие макросы иногда называют автономными) или же внедряться в свойства событий форм, отчетов и элементов управления. Внедренные макросы становятся частью объекта или элемента управления. Объекты макроса отображаются в области навигации в группе Макросы ; внедренные макросы в ней не указываются.

Каждый макрос состоит из одной или нескольких макрокоманд. В зависимости от контекста, в котором вы работаете, некоторые макрокоманды могут быть недоступны.

Построитель макросов

Ниже описаны основные основные функции построителя макросов.

    Каталог макрокоманд Макрокоманды упорядочены по типу и доступны для поиска.

    IntelliSense. При вводе выражений IntelliSense предлагает возможные значения и позволяет выбрать нужный вариант.

    Сочетания клавиш Использование сочетаний клавиш для более быстрой и удобной написания макросов.

    Поток программы Создавайте более удобочитаемые макросы с помощью строк комментариев и групп действий.

    Условные операторы Обеспечивает более сложное выполнение логики с поддержкой вложенных функций если и/или других.

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

    Упрощение совместного использования Скопируйте макрос, а затем вставьте его в виде XML-файла в сообщение электронной почты, запись в группу новостей, блог или образец кода.

В этом видеоролике показано, как пошаговое руководство по основным областям построителя макросов.

Создание автономного макроса

Данная процедура позволяет создать объект автономного макроса, который будет выводиться в списке Макросы в области навигации. Макрос полезно сделать автономным, если вы хотите повторно использовать его во многих частях приложения. Вызывая макрос из других макросов, можно избежать дублирования кода в нескольких местах.

Создание внедренного макроса

Данная процедура позволяет создать макрос, внедренный в свойство события объекта. Такие макросы не отображаются в области навигации, но их можно вызывать их событий, например или Нажатие кнопки .

Так как макрос становится частью объекта формы или отчета, внедренные макросы рекомендуется использовать для автоматизации задач, которые относятся к конкретной форме или отчету.

Добавление макрокоманд в макрос

Макрокомандами называются отдельные команды, которые образуют макрос. Имя макрокоманды отражает ее назначение, например НайтиЗапись или ЗакрытьБазуДанных .

Шаг 1. Просмотр или поиск макрокоманд

Чтобы добавить макрокоманду, прежде всего нужно найти ее в раскрывающемся списке Добавить новую макрокоманду или в каталоге макрокоманд.

Примечания:

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

    • На вкладке Конструктор в группе Показать или скрыть выберите пункт Показать все действия .

    Если каталог макрокоманд не отображается, на вкладке Конструктор в разделе Показать или скрыть нажмите кнопку Каталог макрокоманд .

Найти макрокоманду можно одним из следующих способов:

    Щелкните стрелку раскрывающегося списка Добавить новую макрокоманду и прокрутите список вниз, чтобы найти макрокоманду. Сначала выводятся элементы управления выполнением программы, а затем - макрокоманды в алфавитном порядке.

    Найдите макрокоманду в области "Каталог макрокоманд". Макрокоманды сгруппированы по категориям. Разверните категории для просмотра макрокоманд. При выборе макрокоманды в нижней части каталога выводится ее краткое описание.

    Выполните поиск макрокоманды, введя текст в поле "Поиск" в верхней части области "Каталог макрокоманд". По мере ввода список макрокоманд фильтруется и в нем выводятся все макросы, которые содержат текст. Access ищет введенный текст в именах макросов и их описаниях.

Шаг 2. Добавление макрокоманды в макрос

После того как вы нашли нужную макрокоманду, добавьте ее в макрос с помощью одного из следующих способов:

    Выберите макрокоманду в списке Добавить новую макрокоманду или просто начните вводить имя макрокоманды в поле. Access добавит макрокоманду туда, где отображался список Добавить новую макрокоманду .

    Перетащите макрокоманду из каталога макрокоманд в область макроса. Появится полоса вставки, показывающая, куда будет вставлена макрокоманда, когда вы отпустите кнопку мыши.

    Дважды щелкните макрокоманду в каталоге макрокоманд.

    • Если в области макроса выбрана макрокоманда, Access добавит новую макрокоманду под выбранной.

      Если в области макроса выделен блок Группа , Если , Иначе если , Иначе или Вложенный макрос , Access добавит новую макрокоманду в него.

      Если в области макроса не выбраны макрокоманды и блоки, Access добавит новую макрокоманду в конец макроса.

      Примечания:

      • Если вы уже создали один или несколько макросов, они указаны в узле В этой базе данных каталога макрокоманд.

        • При перетаскивании автономного макроса (который указан в разделе Макросы ) в область макроса создается макрокоманда ЗапускМакроса , которая выполняет перетащенный макрос. Затем вы можете с помощью раскрывающегося списка вызвать вложенные макросы, если они имеются.

          Если вы хотите просто скопировать макрокоманды из автономного макроса в текущий (вместо того чтобы создавать макрокоманду ЗапускМакроса ), щелкните его правой кнопкой мыши в каталоге макрокоманд и выберите команду Добавить копию макроса .

          При перетаскивании внедренного макроса (указанного в объекте формы или отчета) в область макроса макрокоманды из него копируются в текущий макрос.

      • Вы также можете создать макрокоманду путем перетаскивания объекта базы данных из области навигации в область макроса. Если вы перетащите в область макроса таблицу, запрос, форму, отчет или модуль, Access добавит макрокоманду, открывающую их. При перетаскивании другого макроса в область макросов Access добавит макрокоманду, которая запускает этот макрос.

Шаг 3. Ввод аргументов

Для большинства макрокоманд требуется по крайней мере один аргумент. Чтобы просмотреть описание любого из аргументов, выделите макрокоманду, а затем наведите указатель на аргумент. Для многих аргументов вы можете выбрать значение из раскрывающегося списка. Если для аргумента требуется ввести выражения, IntelliSense помогает сделать это, предлагая возможные значения по мере ввода, как показано на рисунке ниже:

Когда появится значение, которое вы хотите использовать, добавьте его в выражение, дважды щелкнув его или выделив его с помощью клавиш со стрелками, а затем нажав клавишу TAB или ВВОД.

Дополнительные сведения о создании выражений см. в статье Введение в использование выражений .

Сведения об использовании IntelliSense со свойствами веб-базы данных

При создании макроса пользовательского интерфейса, внедренного в веб-совместимую форму, IntelliSense позволяет добавлять любые свойства формы в выражение. Однако в веб-базе данных с помощью макросов пользовательского интерфейса можно получать доступ только к некоторым свойствам формы. Например, если в форме "Форма1" есть элемент управления "Элемент1", IntelliSense позволит добавить [Формы]![Форма1]![Элемент1]. в выражение в макросе пользовательского интерфейса. Но если опубликовать базу данных в службах Access, макрос, содержащий выражение, будет вызывать ошибку при запуске на сервере.

В таблице ниже перечислены свойства, которые вы можете использовать в макросах пользовательского интерфейса в веб-базах данных:

Доступные свойства

Caption, Dirty, AllowAdditions, AllowDeletions, AllowEdits

Набор вкладок

Caption, Visible, "Цвет текста", "Цвет фона"

Вложение

Visible, Enabled

Caption, Visible, Enabled, "Цвет текста"

Текстовое поле

Enabled, Visible, Locked, "Цвет текста", "Цвет фона", Value

Изображение

Visible, "Цвет фона"

Поле со списком

Enabled, Visible, Locked, Value

Enabled, Visible, Locked, Value

Веб-браузер

Подчиненная форма

Enabled, Visible, Locked

Элемент навигации

Enabled, Visible

Перемещение макрокоманды

Макрокоманды выполняются в том порядке, в котором они указаны в макросе (сверху вниз). Чтобы переместить макрокоманду в макросе вверх или вниз, воспользуйтесь одним из следующих способов:

    Перетащите макрокоманду вверх или вниз в нужное место.

    Выберите макрокоманду, а затем нажмите клавиши CTRL+СТРЕЛКА ВВЕРХ или CTRL+СТРЕЛКА ВНИЗ.

    Выберите макрокоманду и щелкните стрелку Вверх или Вниз в правой части области макроса.

Удаление макрокоманды

Чтобы удалить макрокоманду:

    Выделите макрокоманду и нажмите клавишу DELETE. Кроме того, вы можете нажать кнопку Удалить (X) в правой части области макроса.

    Примечания:

    • Если удалить блок макрокоманд, например блок Если или Группа , будут также удалены все макрокоманды в блоке.

      Команды Вверх , Вниз и Удалить

Управление выполнением программы с помощью операторов "Если", "Иначе если" и "Иначе"

Если требуется, чтобы макрокоманды выполнялись только при соблюдении определенных условий, используйте блок Если . Он заменяет столбец Условие , который использовался в предыдущих версиях Access. Вы можете дополнить блок Если блоками Иначе если или Иначе , как и в других последовательных языках программирования, например VBA.

На следующем рисунке показан простой блок Если , включающий блоки Иначе если и Иначе :

Блок Если выполняется, если дата в поле ExpirationDate меньше текущей даты.

Блок Иначе если выполняется, если дата в поле ExpirationDate равна текущей дате.

Блок Иначе выполняется, если ни один из предыдущих блоков не выполнился.

На этом блок Если заканчивается.

Добавление блока "Если" в макрос

    Выберите оператор Если в раскрывающемся списке Добавить новую макрокоманду или перетащите его из области "Каталог макрокоманд" в область макроса.

    В поле в верхней части блока Если введите выражение, определяющее, когда будет выполняться блок. Выражение должно быть логическим (то есть его результатом должно быть значение "Да" или "Нет").

    Добавьте макрокоманды в блок Если Добавить новую макрокоманду в блоке или перетащив их из области "Каталог макрокоманд" в блок Если .

Добавление блоков "Иначе" и "Иначе если" в блок "Если"

    Выберите блок Если и в его правом нижнем углу щелкните Добавить блок "Иначе" или Добавить блок "Иначе если" .

    Если вы добавляете блок Иначе если , введите выражение, определяющее, когда будет выполняться блок. Выражение должно быть логическим (то есть его результатом должно быть значение "Истина" или "Ложь").

    Добавьте макрокоманды в блок Иначе если или Иначе , выбрав их из раскрывающегося списка Добавить новую макрокоманду в блоке или перетащив их из области "Каталог макрокоманд" в блок.

    Примечания:

    • Команды для добавления блоков Если , Иначе если и Иначе также доступны в контекстном меню, которое появляется при щелчке макрокоманды правой кнопкой мыши.

      У блоков Если может быть до 10 уровней вложенности.

Создание вложенных макросов

У каждого макроса может быть несколько вложенных макросов. Вложенный макрос вызывается по имени из макрокоманд ЗапускМакроса или ПриОшибке .

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

Примечания:

    Вы также можете создать блок Вложенный макрос , выбрав одну или несколько макрокоманд, щелкнув их правой кнопкой мыши, а затем выбрав команду Сделать блок вложенного макроса .

    Вложенные макросы всегда должны быть последними блоками в макросе; под ними невозможно добавить никакие макрокоманды (кроме других вложенных макросов). Если запустить макрос, который содержит только вложенные макросы, не указав нужный вложенный макрос, будет выполнен только первый вложенный макрос.

    Чтобы вызвать вложенный макрос (например, в свойстве события или с помощью макрокоманд ЗапускМакроса и ПриОшибке ), используйте следующий синтаксис:

    имя_макроса.имя_вложенного_макроса

Группировка связанных макрокоманд

Вы можете сделать макрос более понятным, сгруппировав макрокоманды и присвоив группам продуманные имена. Например, вы можете добавить макрокоманды, открывающие и фильтрующие форму, в группу с именем "Открытие и фильтрация формы". Это позволяет проще понять, какие макрокоманды связаны друг с другом. Блок Группа не влияет на то, как выполняются макрокоманды, и группу невозможно вызвать или запустить по отдельности. Ее основное назначение - присвоение метки группе макрокоманд, которая делает макрос более понятным. Кроме того, при редактировании крупного макроса вы можете свернуть каждый блок группы до одной строки, чтобы меньше использовать прокрутку.

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

    Выберите макрокоманды, которые вы хотите сгруппировать.

    Щелкните выбранные макрокоманды правой кнопкой мыши и выберите Сделать блок группы .

    В поле в верхней части блока Группа введите имя группы.

Если макрокоманды не добавлены:

    Перетащите блок Группа из каталога макрокоманд в область макроса.

    В поле в верхней части блока Группа введите имя группы.

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

Развертывание и свертывание макрокоманд или блоков

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

Развертывание или свертывание одной макрокоманды или блока

    Щелкните знак "плюс" (+ ) или "минус" (- ) слева от имени макроса или блока. Кроме того, можно выбрать макрокоманду или блок с помощью клавиш СТРЕЛКА ВВЕРХ или СТРЕЛКА ВНИЗ, а затем нажать клавишу СТРЕЛКА ВЛЕВО или СТРЕЛКА ВПРАВО, чтобы свернуть или развернуть их.

Развертывание или свертывание всех макрокоманд (но не блоков)

    На вкладке Конструктор в группе Развернуть или свернуть щелкните Развернуть макрокоманды или Свернуть макрокоманды .

Развертывание или свертывание всех макрокоманд и блоков

    На вкладке Конструктор в группе Развернуть или свернуть щелкните Развернуть все или Свернуть все .

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

Копирование и вставка макрокоманд

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

Совет: Чтобы быстро продублировать выбранные макрокоманды, удерживайте нажатой клавишу CTRL и перетащите их в то место макроса, куда вы хотите их скопировать.

Предоставление общего доступа к макросу

Если скопировать макрокоманды в буфер обмена, их можно вставить как XML-код в любое приложение, в котором можно ввести текст. Это позволяет отправить макрос коллеге по электронной почте или опубликовать его на форуме, в блоге или на другом веб-сайте. Получатель затем может скопировать XML и вставить его в конструктор макросов Access 2010. При этом будет получен точно такой же макрос, как у вас.

Запуск макроса

Вы можете запустить макрос с помощью следующих способов:

    Дважды щелкните макрос в области навигации.

    Вызовите макрос с помощью макрокоманды ЗапускМакроса или ПриОшибке .

    Введите имя макроса в свойство события объекта. Макрос будет выполняться при активизации события.

Отладка макроса

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

Добавление в макрос макрокоманд для обработки ошибок

Рекомендуется добавлять макрокоманды для обработки ошибок в каждый создаваемый макрос и не удалять их из него. При использовании этого способа Access выводит описание возникающих ошибок. Описания ошибок помогают понять, в чем дело, и быстрее устранить проблему.

Чтобы добавить вложенный макрос для обработки ошибок:

    Вложенный макрос из раскрывающегося списка Добавить новую макрокоманду .

    В поле справа от слова Вложенный макрос введите имя вложенного макроса, например ОбработкаОшибок .

    В раскрывающемся списке Добавить новую макрокоманду , который отображается в блоке Вложенный макрос , выберите макрокоманду ОкноСообщения .

    В поле Сообщение введите следующий текст: =.

    В нижней части макроса выберите ПриОшибке из раскрывающегося списка Добавить новую макрокоманду .

    Для аргумента Перейти укажите значение Имя макроса .

    В поле Имя макроса введите имя вложенного макроса обработки ошибок (в данном примере - ОбработкаОшибок ).

    Перетащите макрокоманду ПриОшибке в самую верхнюю часть макроса.

На следующем рисунке показан макрос с макрокомандой ПриОшибке и вложенным макросом ОбработкаОшибок .

Макрокоманда ПриОшибке расположена вверху макроса и вызывает вложенный макрос ОбработкаОшибок в случае ошибки.

Вложенный макрос ОбработкаОшибок выполняется только в том случае, если он был вызван макрокомандой ПриОшибке , и отображает окно с сообщением об ошибке.

Использование команды пошагового исполнения

Пошаговое исполнение -это режим отладки макроса, который можно использовать для выполнения макроса по одной макрокоманде за раз. После выполнения каждой макрокоманды выводится диалоговое окно со сведениями о ней и кодами всех возникших ошибок. Но так как в диалоговом окне "Пошаговое исполнение макроса" не выводится описание ошибки, мы рекомендуем использовать метод с вложенными макросами обработки ошибок, описанный в предыдущем разделе.

Чтобы перейти в пошаговый режим:

    Откройте макрос в Конструкторе.

    На вкладке Конструктор в группе Сервис нажмите кнопку По шагам .

    Сохраните и закройте макрос.

При следующем запуске макроса откроется диалоговое окно Пошаговое исполнение макроса . В нем выводятся следующие сведения о каждой макрокоманде:

    имя макроса;

    условие (для блоков "Если");

    имя макрокоманды;

    аргументы;

    номер ошибки (номер 0 означает, что ошибки нет).

При пошаговом исполнении макрокоманд можно использовать следующие три кнопки в диалоговом окне:

    Чтобы просмотреть сведения о следующей макрокоманде, нажмите кнопку По шагам .

    Чтобы остановить все макросы, которые выполняются в данный момент, нажмите кнопку Остановить все макросы . Пошаговый режим будет по-прежнему действовать при следующем запуске макроса.

    Чтобы выйти из пошагового режима и продолжить выполнение макроса, нажмите кнопку Продолжить .

    Примечания:

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

      Чтобы перейти в пошаговый режим по время выполнения макроса, нажмите клавиши CTRL+BREAK.

      Чтобы перейти в пошаговый режим в определенный момент выполнения макроса, добавьте макрокоманду Шаг в соответствующую часть макроса.

      Пошаговый режим недоступен для веб-баз данных.

Преобразование макроса в код VBA

Макросы предоставляют набор команд, доступных в языке программирования Visual Basic для приложений (VBA). Если вы решили больше функциональных возможностей, чем может предоставить макросы, вы можете легко преобразовать автономный объект макроса в код VBA, а затем использовать расширенный набор функций, предоставляемый VBA. Тем не менее, следует помнить, что код VBA не будет работать в браузере; код VBA, добавленный в веб-базу данных, будет выполняться только в том случае, если база данных открыта в Access.

Примечание: Внедренные макросы невозможно преобразовать в код VBA.

Чтобы преобразовать макрос в код VBA:

    В области навигации щелкните объект макроса правой кнопкой мыши и выберите пункт "Конструктор".

    На вкладке Конструктор в группе Сервис выберите команду Преобразовать макросы в Visual Basic .

    В диалоговом окне Преобразование макроса укажите, нужно ли добавлять код обработки ошибок и примечания в модуль VBA, а затем нажмите кнопку Преобразовать .

Access подтвердит, что макрос был преобразован, и откроет редактор Visual Basic. Дважды щелкните преобразованный макрос в области проекта, чтобы просмотреть и изменить модуль.

Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также (на английском языке).