Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Access 2007

.pdf
Скачиваний:
117
Добавлен:
11.05.2015
Размер:
23.5 Mб
Скачать

Для создания группы макросов просто создается макрос, использующий столбец Имя макроса. Обычно столбец Имя макроса скрыт, поскольку все макрокоманды — это компоненты одного и того же макроса. Но при создании группы макросов следует выбрать на ленте

Работа с макросами | Конструктор Показать или скрыть Имена макросов (Macro Tools | Design → Show/Hide → Macro Names) для отображения этого столбца.

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

Рис. 15.15. Эта группа макросов объединяет три макроса, перечисляя все их макрокоманды одну за другой. В начале каждого нового макроса в столбце Имя макроса появляется его имя. Обратите внимание на пустые строки и многочисленные комментарии. Программа Access игнорирует эти детали

Подсказка

Легче всего применять группы к коротким макросам (макросам, у которых не слишком много макрокоманд). Когда необходимо редактировать макрос, можно использовать удобную команду ленты Вставить строки (Insert Rows) для увеличения доступного свободного пространства.

У каждого макроса, включенного в группу, двухчастное имя. Первая часть — имя группы макросов, а вторая часть — любой текст, который вы ввели в столбец Имя макроса. Полное имя макроса PrintCheapskates (печать прижимистых клиентов) в группе макросов BasicMacros (основные макросы), показанного на рис.. 15.15, — BasicMacros.PrintCheapskates. При запуске макроса следует использовать его полное имя.

521

Одно из ограничений групп макросов заключается в невозможности использования их из области переходов. Если щелкнуть правой кнопкой мыши группу макросов в области переходов и выбрать команду Выполнить (Run), программа Access выполнит только первый макрос в группе. Для запуска остальных макросов следует выбрать на ленте Работа с базами данных Макрос Выполнить макрос (Database Tools → Macro → Run Macro). Затем можно ввести правильное двухчастное имя или выбрать его из раскрывающегося списка (как показано на рис. 15.16).

Рис. 15.16. В данном примере программа Access готова к выполнению макроса MailResults из группы

BasicMacros

Примечание

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

Назначение макросу комбинации клавиш

Иногда создается макрос настолько удобный, что хочется иметь его под рукой все время. Сделать это можно, назначив макросу комбинацию клавиш. Затем вместо направления в область переходов вы нажимаете, например <Ctrl>+<M>, и ваш макрос немедленно стартует.

Подсказка

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

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

Как же действует макрос AutoKeys? Все дело в имени. Когда добавляется макрос в группу AutoKeys, вы даете ему специальным образом закодированное имя, реально представляющее собой сочетание клавиш. Когда вы называете макрос ^М, программа Access знает, что его надо запускать, когда нажимается комбинация клавиш <Ctrl>+<M>. На рис. 15.17 показано несколько примеров макросов.

Примечание

На рис. 15.17 видно, что каждый макрос в группе выполняет отдельно хранящийся объект-макрос с помощью макрокоманды ЗапускМакроса. Такой проект необязателен (можно кодировать

522

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

Рис. 15.17. В данном примере группа макросов AutoKeys содержит три макроса, которым назначены комбинации клавиш <Ctrl>+<Shift>+<M>, <Ctrl>+<Shift>+<P> и <Ctrl>+<Shift>+<T> соответственно

Единственная особенность применения группы макросов AutoKeys — знание правил именования макросов, позволяющих программе Access применять те сочетания клавиш, которые вы назначили. Access разрешает использовать буквы и цифры в комбинации с клавишами <Ctrl> и <Shift>. (Клавиша <Alt> запрещена, поскольку используется при выборе команд на ленте.) Кроме того, можно использовать функциональные клавиши (<F1>— <F12>) и клавиши <Insert> и <Delete>, также в сочетании с клавишами <Ctrl> и <Shift>.

Вот как именуется макрос:

^ обозначает клавишу <Ctrl>. Таким образом, ^М означает <Ctrl>+<M>;

+ обозначает клавишу <Shift>. Таким образом, ^+М означает <Ctrl>+<Shift>+<M>;

{F1} обозначает клавишу <F1>. Таким образом, +{Fi} означает <Shift>+<Fl>. Все остальные функциональные клавиши применяются аналогично;

{INS} обозначает клавишу <Insert> и {DEL} обозначает клавишу <Delete>. Таким образом, ^{INS} — это <Ctrl>+<Insert>.

Подсказка

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

523

Access. Примером может служить сочетание <Ctrl>+<S>, сохраняющее текущий объект. Для снижения вероятности возникновения конфликтов при использовании клавиатурных сочетаний используйте комбинации, включающие клавишу <Shift>, которая применяется реже.

Настройка макроса запуска

Неизбежно, время от времени вы будете создавать макрос, который настолько важен, что вы захотите запускать его, как только будет открываться БД. Возможно, этот макрос открывает некоторые важные формы и отчеты, импортирует данные из другого файла или запускает очищающий запрос. Независимо от причины программа Access упрощает процесс выполнения макроса запуска. Все, что нужно сделать, — назвать ваш макрос AutoExec.

Access также предоставляет способ обхода макроса AutoExec. Если держать нажатой клавишу <Shift> во время первой загрузки БД, программа Access не выполняет макрос AutoExec (и не отображает любую стартовую форму, которую вы, может быть, настроили). Но не надейтесь на эту уловку, поскольку очень легко забыть нажать клавишу <Shift> в нужное время.

Подсказка

Помните о том, что если ваш макрос содержит опасные макрокоманды и ваша БД не надежна, программа Access не выполнит его. Если открыть ненадежную БД и выбрать включение опасного содержимого БД с помощью панели сообщений, Access повторно загрузит БД и в этот момент запустит макрос AutoExec.

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

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

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

Что такое событие

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

У формы есть три типа событий.

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

полнения любой макрокоманды.) Когда изменяется значение в элементе Поле, возникает событие Изменение (On Change). (Самое время проверить, имеет ли смысл введенное

524

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

Примечание

У многих элементов управления одинаковые события. Если у вас на форме два поля и одна кнопка, у всех у них есть событие Нажатие кнопки (On Click). Но путаницы не возникает, поскольку программа Access отслеживает, какое событие возникает в каком элементе управления.

События разделов. Как вы узнали раньше, формы имеют разделы, поэтому можно отделить содержимое заголовка и примечания от остальных данных записи. У каждого раздела есть несколько собственных событий, которые происходят, когда вы перемещаете мышь в разделе (ПеремещениеУказателя (On Mouse Move)) или щелкаете кнопкой мыши на пустом месте (НажатиеКнопки (On Click)). Эти события, как правило, менее полезны для программистов макроса.

События формы. Длинный список более общих, событий относится к форме. Этот список включает события, которые возникают, когда форма открывается впервые (Открытие (On Open)) и когда она закрывается (Закрытие (On Close)), когда вы переходите от одной записи к следующей (Текущая Запись (On Current)) и когда завершается операция над данными, например, обновление (После обновления (After Update)).

Рис. 15.18. Здесь показаны события для типичного поля ввода. Если щелкнуть кнопкой мыши одно из полей вкладки События, в строке состояния, в левой нижней части окна, появляется однострочное описание события. Как можно видеть, сейчас все поля событий пусты, что означает отсутствие присоединенного макроса

525

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

1.Откройте форму в режиме Конструктора.

Если на экране нет Окна свойств, отобразите его, выбрав на ленте Инструменты конст-

руктора форм | Конструктор → Сервис → Страница свойств (Form Tools | Design Tools

Property Sheet).

2.Выберите элемент, имеющий события, которые вы хотите исследовать.

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

3.В Окне свойств перейдите на вкладку События.

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

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

Таблица 15.4. События, полезные для программирования макроса

Элемент

Событие

Описание

управления

 

 

 

 

 

Все элементы

Вход (On Enter)

Возникает, когда вы переходите к

управления

 

элементу управления в первый раз (либо

 

 

нажатием клавиши, такой как <Таb>,

 

 

либо щелчком кнопки мыши)

 

 

 

 

Перемещение указателя

Происходит, когда мышь перемещается

 

(On Mouse Move)

по элементу управления

 

 

 

Любой редактируе-

Изменение (On Change)

Возникает, когда изменяется значение в

мый элемент управ-

 

элементе управления

ления

 

 

 

 

 

Кнопка

Нажатие кнопки (On

Происходит, когда кнопку щелкают

 

Click)

мышью. У других элементов управления

 

 

тоже есть событие, связанное со щелчком

 

 

кнопкой мыши, но большинство

 

 

пользователей привыкло щелкать мышью

 

 

кнопки, чтобы выполнить какое-либо

 

 

действие

 

 

 

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

Отсутствие в списке (On

Возникает, когда вводится значение,

 

Not In List)

которого нет в списке

 

 

 

Форма

Загрузка (On Load)

Происходит, когда форма открывается

 

 

впервые (и вы можете инициализировать

 

 

ее)

526

Таблица 15.4 (окончание)

 

 

 

 

Элемент

Событие

Описание

управления

 

 

 

 

 

 

Закрытие (On Close)

Возникает, когда форма закрывается.

 

 

Можно отменить это событие, если

 

 

хотите оставить форму открытой

 

 

 

 

Текущая запись (On

Происходит, когда вы переходите к

 

Current)

записи (включая открытие формы и

 

 

переход к первой записи)

 

Внесены изменения (On

Возникает, когда вы вносите первое изме-

 

Dirty)

нение в запись. Сейчас она в режиме

 

 

редактирования

 

Отмена (On Undo)

Происходит, когда вы выходите из

 

 

режима редактирования и отменяете

 

 

внесенные изменения (обычно нажатием

 

 

клавиши <Esc>)

 

До вставки (Before Insert),

Возникает в процессе вставки,

 

До обновления (Before

обновления или удаления. Можно

 

Update), До подтвержде-

отменить это событие, если не нравится

 

ния (Before Del Confirm)

то, что видите (например, обнаружили

 

 

некорректные данные)

 

 

 

 

После вставки (After

Происходит после завершения операции.

 

Insert), После обновления

Вы уже не можете отменить его, но может

 

(After Update), После

возникнуть желание отреагировать на

 

подтверждения (After Del

изменения выполнением другой задачи

 

Confirm)

или обновлением отображенных данных

Примечание

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

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

Присоединение макроса к событию

Теперь, когда вы увидели события, которые предлагают формы и элементы управления, пора попробовать присоединить макрос. Основная последовательность действий проста.

1.Создайте и сохраните макрос, как описано в разд. "Создание макроса "ранее в этой главе.

2.Откройте вашу форму в Конструкторе и убедитесь в том, что на экране отображается Окно свойств.

527

3.Выберите элемент управления, раздел или всю форму.

4.В Окне свойств выберите вкладку События и найдите событие, которое хотите использовать.

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

На рис. 15.19 показан пример.

Рис. 15.19. В этом примере к событию Нажатие кнопки присоединяется макрос MailResults. Теперь при каждом щелчке " кнопки мышью будет выполняться данный макрос

Часто задаваемый вопрос. Внедренный макрос

Я создал макрос с помощью Мастера кнопок. Как его можно отредактировать?

Когда вы помещаете кнопку на форму, программа Access запускает Мастер кнопок, который создает для вас макрос (см. разд. "Выполнение действий с помощью кнопок" главы 13). Мастер кнопок создает внедренные макросы, т. е. макросы, которые хранятся внутри объекта-формы. У этой системы есть несколько достоинств (например, вы можете перемещать вашу форму из одной БД в другую без потери связанных с ней макросов). Но у нее есть и недостатки, а именно: вы не можете редактировать или выполнять макрос независимо.

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

528

Далее описано, как это делается.

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

2.Найдите событие с внедренным макросом. В случае кнопки это событие Нажатие кнопки (On Click). В поле Событие вы увидите текст [Внедренный макрос] ([Embedded Macro]), а не имя макроса.

3.Щелкните один раз кнопкой мыши внутри поля Событие. Рядом с ним появится кнопка с многоточием (...).

4.Щелкните кнопку с многоточием, чтобы отредактировать макрос в знакомом конструкторе или построителе макроса (macro builder).

Считывание аргументов из формы

Раньше, в этой главе, вы видели макросы, которые могут искать записи, печатать отчеты и отправлять данные по электронной почте. Во всех этих случаях аргументы макросов были фиксированными значениями — другими словами, вы их вводили явно и они никогда не менялись. В разд. "Поиск записи "ранее в этой главе вы познакомились с макросом, который находил текст "hay". Несмотря на удобство этого макроса, его нельзя применить для поиска другого текста. Если нужно найти другой текст, придется создать целиком новый макрос.

Рис. 15.20. Вместо поиска слова "hay" в этом примере ищется любой нужный вам текст. В чем хитрость? Вы задаете текст для поиска в поле ввода в верхней части формы

Для создания более гибких макросов вместо фиксированного значения можно использовать выражение. Раньше вы неоднократно применяли выражения (см. примеры с запросами в разд. "Вычисляемые поля" главы 7, с отчетами в разд. "Выражения" главы 11 и с формами в разд. "Выполнение вычислений в выражениях"главы 13), поэтому у вас не будет проблем при

529

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

Для знакомства с этим процессом в действии можно просмотреть пример с фильтрацией, приведенный ранее, и создать форму поиска, подобную показанной на рис. 15.20.

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

1.Откройте форму в режиме Конструктора.

2.Выберите на ленте Инструменты конструктора форм | Конструктор Элементы управления Поле (Form Tools | Design Controls Text Box) и нарисуйте элемент Поле на форме.

3.После этого выделите его и затем в Окне свойств выберите вкладку Другие.

4.В верхней части вкладки Другие измените свойство Имя на что-то более интуитивно понятное, например, SearchText (ИскомыйТекст).

Примечание

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

Теперь можно создавать макрос. Вам больше не нужна макрокоманда ОткрытьФорму (OpenForm), которую вы применяли в исходном макросе, поскольку, как вы могли догадаться, программа Access будет запускать данный макрос из уже открытой формы AnimalTypes (виды животных). Поэтому вам нужна, прежде всего, макрокоманда КЭлементуУправления (GoToControl) с аргументом Имя элемента (Control Name), имеющим значение Description (описание).

Вторая макрокоманда — НайтиЗапись (FindRecord). Вместо задания фиксированного текста (="hay") в аргументе Образец поиска (Find What) вам нужно указать элемент управления SearchText с помощью его имени (=SearchText). Если в имени есть пробелы или специальные символы, убедитесь в том, что имя заключено в квадратные скобки (=[SearchText] ).

Примечание

Если вы ссылаетесь на поле или элемент управления в текущей форме, вам понадобится только имя поля или элемента управления. Но иногда бывает нужно сослаться на элемент управления в другой форме. В этом случае придется применить причудливый синтаксис, обозначающий имя формы и имя элемента управления. Если вы хотите сослаться на элемент с именем SearchText на форме, названной SearchForm, следует написать = For ms !S e ar ch For m!S e a r ch Te xt .

После того как макрос отшлифован, последний шаг — вставка кнопки в форму AnimalTypes для запуска макроса. Далее приведены необходимые действия.

1. Выберите на ленте Инструменты конструктора форм | Конструктор Элементы управления Кнопка (Form Tools | Design Controls Button) и нарисуйте кнопку на форме.

530

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]