Главная страница

Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33


Скачать 19.64 Mb.
НазваниеКраткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
АнкорAccess_2007.doc
Дата16.03.2017
Размер19.64 Mb.
Формат файлаdoc
Имя файлаAccess_2007.doc
ТипКраткое содержание
#3862
страница43 из 65
1   ...   39   40   41   42   43   44   45   46   ...   65


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

Есть еще одна возможность. Можно открыть таблицу или отчет с аргументом Режим, имею­щим значение Просмотр (Print Preview). В этом случае данные на самом деле не посылаются на принтер, но приближают на шаг к этой операции. Это лучший выбор, если вам нужно выбрать принтер, убедиться в корректности данных и проверить объем предназначенной для печати информации. Он также работает с ненадежными БД.

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

На профессиональном уровне.

ОтправитьОбъект работает с вашей программой элекронной почты
Макрокоманда ОтправитьОбъект использует стандарт, именуемый MAPI (Messaging Application Programming Interface, интерфейс прикладного программирования для электронной почты), т. е. позволяет вам применять любую Windows-программу элек­тронной почты. Неважно, предпочитаете вы Outlook, Eudora, Pegasus или что-то более экзотическое — ОтправитьОбъект способна запустить вашу программу электронной почты и использовать ее для отправки сообщения. Если вы не знаете, какая программа используется по умолчанию на вашем компьютере для отправки электронной почты, это легко установить.

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

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

Команда ОтправитьОбъект на удивление универсальна. Ее можно применять в следую­щих случаях.

  • Для отправки по электронной почте объекта БД другому пользователю. Объект БД преобразуется в другой выбранный вами формат, например электронную таблицу Excel, Web-страницу на языке HTML или даже подготовленный для вывода на печать PDF-файл (если вы установили свободно распространяемый дополнительный модуль "Save As PDF" (сохранить как PDF-файл), описанный в разд. "Получение дополнительного модуля "aveAsPDF'" главы 10). Объект, который вы хотите послать, задается с помощью аргументов Тип объекта и Имя объекта.

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

  • Для отправки обычного электронного сообщения. Для этого оставьте пустыми оба аргумента: Тип объекта и Имя объекта. Вы можете написать сообщение в свойстве Сообщение (Message Text). Этот метод удобен для оповещения кого бы то ни было о том, что вы вставили новые данные или внесли значительные корректировки.



Примечание

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

Самое приятное то, что команду ОтправитьОбъект можно использовать в ненадежных БД при соблюдении следующего правила: у аргумента Изменение сообщения (Edit Message) должно быть значение Да. В этом случае, когда выполняется макрос, у вас есть последняя возможность просмотреть сообщение, изменить любой текст и отменить его от­правку, если чем-то не довольны. Если же у аргумента Изменение сообщения значение Нет, макрокоманда ОтправитьОбъект отправляет сообщение, не предоставляя возможно­сти его просмотра и корректировки. Такое поведение считается рискованным, поэтому про­грамма Access не допускает его в ненадежных БД.

В приведенном в табл. 15.3 макросе два запроса с данными о продажах преобразуются в электронные таблицы Excel. Затем они посылаются ведущим руководителям.

Таблица 15.3. Макрос отправки данных по электронной почте

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

Важные аргументы4

Описание

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

Тип объекта: Запрос Имя объекта: MonthlySalesTotals

Формат вывода: Excel Workbook (.xlsx)

Кому: headhoncho@acme.com Тема: Monthly Update

Сообщение: Здесь представлены самые свежие объемы продаж, непо­средственно из применяющей макро­сы БД Access. Вы получите итоги по клиентам в отдельном электронном письме

Изменение сообщения: Да

Отправляет сообщение электронной почты руководителю headhon-cho@acme.com с данными из запро­са MonthlySalesTotals (месячные итоги продаж), преобразованного в рабочую книгу Excel. Тема сообще­ния и его текст заданы в аргументах Тема и Сообщение. У вас есть воз­можность подправить их перед от­правкой сообщения. На рис. 15.14 показано это действие

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

Тип объекта: Запрос Имя объекта: CustomerSalesTotals

Формат вывода: Excel Workbook (.xlsx)

Кому: headhoncho@acme.com Тема: Monthly Update

Сообщение: Здесь представлены итоги по клиентам

Изменение сообщения: Да

Отправляется второе электронное сообщение руководителю headhon-cho@acme.com с данными из запро­са CustomerSalesTotals


Если вы технически грамотны, то можете отправить сообщения по электронной почте одновременно огромному количеству людей. Самый простой вариант — вставить полный список адресов в аргументы Кому, Копия или СК, разделив адреса точкой с запятой (;). Но лучше применить список рассылки. Этот метод может меняться в зависимости от исполь­зуемой почтовой программы, но в программах Outlook и Outlook Express его использовать легко — просто вставьте имя списка рассылки в поле Кому. Если вы создали список, на­званный FairweatherFriends (друзья хорошей погоды), введите слово FairweatherFriends в аргумент Кому.
Подсказка

Не хватает места для редактирования сообщения? Нажмите комбинацию клавиш + во время редактирования свойства Сообщение для отображения Окна ввода большего раз­мера, в котором видны одновременно несколько строк.

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

Управление макросами

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

Группы макросов

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

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

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

Для создания группы макросов просто создается макрос, использующий столбец Имя макроса. Обычно столбец Имя макроса скрыт, поскольку все макрокоманды — это компо­ненты одного и того же макроса. Но при создании группы макросов следует выбрать на лен­те Работа с макросами | Конструктор Показать или скрыть Имена макросов (Macro Tools | Design → Show/Hide → Macro Names) для отображения этого столбца.

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



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

Подсказка

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

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

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



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

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


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

Подсказка

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

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

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

Примечание

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

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



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

и ++ соответственно
Единственная особенность применения группы макросов AutoKeys — знание правил именования макросов, позволяющих программе Access применять те сочетания клавиш, которые вы назначили. Access разрешает использовать буквы и цифры в комбинации с кла­вишами и . (Клавиша запрещена, поскольку используется при выборе команд на ленте.) Кроме того, можно использовать функциональные клавиши () и клавиши и , также в сочетании с клавишами и .

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


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

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

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

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



Подсказка

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

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


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

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

Подсказка

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

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

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

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

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

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

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

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

Примечание

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

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

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



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

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

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)

Происходит, когда форма открывается впервые (и вы можете инициализировать ее)

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

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

Событие

Описание




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

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




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

Происходит, когда вы переходите к записи (включая открытие формы и переход к пер­вой записи)




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

Dirty)

Возникает, когда вы вносите первое изме­нение в запись. Сейчас она в режиме редак­тирования




Отмена (On Undo)

Происходит, когда вы выходите из режима редактирования и отменяете внесенные изменения (обычно нажатием клавиши )




До вставки (Before Insert), До обновления (Before Update), До подтвержде­ния (Before Del Confirm)

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




После вставки (After Insert), После обновления (After Update), После подтвер­ждения (After Del Confirm)

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


Примечание

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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



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



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

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

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

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

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

  2. Выберите на ленте Инструменты конструктора форм | Конструктор Элементы

управления Поле (Form Tools | Design Controls Text Box) и нарисуйте элемент Поле на форме.

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

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



Примечание

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

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

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

Примечание

Если вы ссылаетесь на поле или элемент управления в текущей форме, вам понадобится только имя поля или элемента управления. Но иногда бывает нужно сослаться на элемент управления в другой форме. В этом случае придется применить причудливый синтаксис, обозначающий имя формы и имя элемента управления. Если вы хотите сослаться на эле­мент с именем SearchText на форме, названной SearchForm, следует написать =Forms!SearchForm!SearchText.

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

1. Выберите на ленте Инструменты конструктора форм | Конструктор Элементы

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

  1. Нажмите клавишу для отказа от запуска Мастера кнопок.

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

  1. Щелкните кнопкой мыши направленную вниз стрелку в поле события Нажатие кнопки (On Click) и затем из списка выберите только что созданный макрос.

  2. Теперь выберите вкладку Макет и в поле Подпись введите слово Search(Поиск). Этот пояснительный текст появится на кнопке.

Данный шаг завершает пример. Для его проверки перейдите в Режим формы, введите что-нибудь в поле SearchText и щелкните мышью кнопку Search. Вы перейдете сразу к записи, в которой есть искомый текст.

Изменение свойств формы
Значения свойств формы можно не только читать, но и изменять. Хитрость заключается в применении макрокоманды ЗадатьЗначение (SetValue). Это очень мощная команда, по­скольку она способна изменить любое свойство элемента управления. Ее можно применять для изменения текста в элементе управления, скрытия элемента, изменения его форматиро­вания и т. д. (Дополнительную информацию о свойствах разных элементов управления, ко­торые вы могли бы использовать, см. в главе 13.) Единственная загвоздка — программа Ac­cess считает команду ЗадатьЗначение опасной, поэтому не разрешит выполнить ее в ненадежной БД (см. разд. "Как Access обрабатывает опасные макросы "ранее в этой главе).

У макрокоманды ЗадатьЗначение только два аргумента. Первый аргумент, Элемент (Item) обозначает то, что вы хотите изменить. Можно изменять форму, раздел, поле или элемент управления. Второй аргумент Выражение (Expression) задает новое значение. Можно использовать константу или считать нужное значение из другого элемента управле­ния с помощью выражения.

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

Примечание

В данном примере считается, что вы применяете макрокоманду ЗадатьЗначение к теку­щей форме (например, нажатием кнопки Clear (Очистить)). Если вы запускаете макрос из области переходов, необходимо SearchText заменить полным именем Forms ! AnimalTypes ! SearchText, которое сообщает программе Access, какую именно форму вы используете.

Если вам понравилась команда ЗадатьЗначение, возможно, вас заинтересует и связан­ная с ней макрокоманда ЗадатьСвойство. Эта команда изменяет одно из свойств элемента управления. (Вы выбираете, какое свойство изменить, с помощью аргумента Свойство.) Команду ЗадатьСвойство можно использовать для изменения цвета элемента управления, его положения или подписи. Но чаще всего макрокоманду ЗадатьСвойство применяют для изменения свойств Включено (Enabled) (для блокировки элементов управления, которые нельзя редактировать) или Видно (Visible) (для скрытия второстепенных элементов управ­ления). Обоим свойствам можно задать значения Истина или Ложь.

Главное достоинство команды ЗадатьСвойство заключается в том, что программа Access всегда считает ее безопасной. Единственный недостаток состоит в том, что Access не разрешает

задавать свойство Текст (Text) элемента управления, поскольку его можно использо­вать для модификации таблицы.

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

Для создания макроса с условием необходимо применить столбец Условие (Condition). Обычно он не отображается. Для того чтобы сделать его видимым в конструкторе макроса, выберите на ленте Работа с макросами | Конструктор → Показать или скрыть →Условия (Macro Tools | Design Show/Hide Conditions).

Неудивительно, что именно в столбце Условие задаются условия. Условие похоже на выражение, но оно в результате всегда выдает одно из двух значений: Истина или Ложь. Программа Access проверяет условие и решает с его помощью выполнить или нет соответ­ствующую макрокоманду. (На языке программистов это называется проверкой условия.)

Вот как действует этот механизм.

  • если оставить столбец Условие пустым (как в случае обычных макросов), программа Access всегда выполняет данную макрокоманду, если она не сбрасывается из-за ошибки;

  • если условие задано и оказывается Истиной, Access выполняет соответствующую макрокоманду;

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

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

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

[ProductName] = "Baloney"

Это условие сравнивает текущее значение элемента управления ProductName со словом "Baloney" (болонская копченая колбаса). Если в данный момент ProductName содержит этот текст (и только его), условие равно Истине. Если же ProductName содержит что-то еще, результат условия — Ложь.
Подсказка

Иногда вы получаете условие прямо противоположное тому, которое хотели создать. В труд­ный момент всегда можно изменить условие на противоположное, поместив в начало слово Not. Условие Not [ProductName] ="Baloney" равно Истине, только если текущий эле­мент не содержит любимый всеми мясной продукт.

Знак равенства (=) — один из основных компонентов условной логики, но не единствен­ный вариант. Можно использовать знаки операций "больше чем" (>) и "меньше чем" (<) и оператор "не равно" (о). Далее приведено выражение, проверяющее, больше ли числовое поле определенного значения:

[Price] > 49.99

Для пущей важности можно добавить в смесь ваши любимые функции Access. (В главах 4 и 7 описано множество полезных функций.) Далее приведено условие, проверяющее длину поля и возвращающее значение Истина, если поле меньше трех символов:

Len ( [FirstName] ) < 3

Вместо операторов, которые вы видели до сих пор, для создания собственных условий можно применять функцию, дающую результат Истина или Ложь. Знатоки программиро­вания называют результат, который может быть Истиной или Ложью и ничем иным, буле­вым значением в честь британского суперматематика Джоржа Буля.

У программы Access есть лишь несколько функций, возвращающих булевы значения, но самая замечательная из этой звездной плеяды называется IsNull ( ). Как вы узнали раньше, незаполненные поля — это поля, не содержащие никаких данных. Функция IsNull ( ) про­веряет, не пусто ли данное поле или элемент управления. Вот как можно ее применять для выявления пропущенной фамилии:

IsNull ( [LastName] )

Это условие дает в результате значение Истина, если в текущем поле LastName нет ни­каких данных.

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

В заключение, последний прием, который может применяться в условиях, — сочетание нескольких условий для создания более мощных суперусловий. Для этого есть два ключе­вых слова, способных помочь вам объединять условия: And (И) и Or (Или).

And требует одновременного выполнения обоих условий, таким образом, делая ваше условие более строгим. Следующее условие возвращает результат Истина, только если оба поля и FirstName, и LastName длиннее трех символов каждое:

Len([FirstName]) < 3 And Len([LastName]) < 3

Or предоставляет две альтернативы для удовлетворения условия. Следующее условие возвращает результат Истина, если поле FirstName или LastName пусто. Оно возвращает Ложь, только если в обоих полях есть текст.

IsNull([FirstName]) Or IsNull([LastName])

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

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

Примечание

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

Первый шаг — реагировать на подходящие события — главным образом события формы До вставки, До обновления и До подтверждения. Когда они возникают, можно выполнить условия и найти среди них ошибочные. Если вы видите что-то, что вам не нравится, исполь­зуйте команду ОтменитьСобытие (CancelEvent) для полного прерывания процесса и, таким образом, отмены операции вставки, обновления или удаления.
Рис. 15.21. Когда устанавливается флажок Please notify me about special offers (Пожалуйста, сообщайте мне о специальных предложениях), в поле WantsEmail устанавливается значение Да. Но у этой записи есть проблема — в поле Email нет значения

Примечание

У команды ОтменитьСобытие нет аргументов — она просто прерывает выполняющийся в данный момент процесс. ОтменитьСобытие работает с любым событием, начинающимся со слова "До" ("Before"), что означает готовность реальной операции к выполнению, но еще не са­мо ее выполнение.

Допустим, вы хотите создать простое условие, которое останавливает обновление опре­деленной записи. Рассмотрите форму, показанную на рис. 15.21.

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

логику.

Вам понадобится следующее логическое условие:

WantsEmail = Yes And IsNull ( [EmailAddress] )

Это условие возвращает значение Истина, если WantsEmail равно Да и EmailAddress пусто. Когда это выполняется, самое время отменить обновление с помощью макрокоманды ОтменитьСобытие.
Примечание

Другого варианта нет. Можно использовать макрокоманду ЗадатьЗначение для замены не­корректных значений. Но, как правило, лучше дать возможность пользователю, выполняюще­му обновление, попытаться самостоятельно устранить проблему.
Когда событие отменяется, оно не выполняет откат всех изменений. Отмена события лишь мешает завершению операции. Если изменяется запись и делается попытка перейти к другой записи, возникает событие До обновления (Before Update). Если макрос отменяет это событие, программа Access запрещает переходить к другой записи и оставляет вас на прежнем месте. Но текущая запись остается в режиме редактирования со всеми отредакти­рованными значениями. Ваше дело устранить проблему или нажать клавишу для полного отказа от попытки обновления.

Условная макрокоманда ОтменитьСобытие — сердцевина многих проверочных макро­сов. Но вам нужен еще один завершающий штрих: сообщение об ошибке. Иначе пользова­тель, выполняющий обновление, не догадается, в чем дело. Он будет склонен считать, что Access совсем слетела с катушек.

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

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

На рис. 15.22 показан законченный макрос, а на рис. 15.23 — выполняющийся макрос.





Р
ис. 15.22.
Этот макрос состоит из двух макрокоманд с условием. Для блокировки некорректных данных присоедините его к событиям До обновления и До вставки
Рис. 15.23. Макрос находит пропущенный электронный адрес и поясняет возникшую проблему

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

Для того чтобы увидеть пример типичных проблем, с которыми вы можете столкнуться, стоит вернуться к макросу StopMissingEmail, который рассматривался в предыдущем раз­деле. Но теперь добавим новый метод. Вместо отмены обновления или вставки ваш макрос будет запрашивать подтверждения заданных вами действий, как показано на рис. 15.24.

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

MsgBox("Is this really what you want to do?", 4) = 7

В
первой части условия применяется функция MsgBox () для отображения окна сообще­ния. Число 4 сообщает программе Access о том, что окно сообщения должно включать кноп­ки Yes (Да) и No (Нет). Функция MsgBox () возвращает результат 6, если щелкнуть мышью кнопку Yes, и 7, если щелкнуть кнопку No, таким образом, это условие истинно, только если вы щелкнули мышью кнопку, отменяющую изменения.
Рис. 15.24. Теперь вам решать, применять ли это явно противоречивое обновление: подписаться на получение обновлений по электронной почте и не предоставить адрес. (Возможно, вам действительно нужны регулярные электронные сообщения, но тогда придется вернуться позже и добавить корректный адрес электронной почты)

Примечание

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

Итак, вам нужен макрос, который ищет некорректные данные и если находит, отобража­ет на экране окно сообщения. Концептуально этот макрос не слишком сложен. Но если вы начнете создавать нужный макрос, то поймете, что нет удобного способа объединения усло­вий. Найти недопустимые вводимые значения довольно легко, но как гарантировать ото­бражение второго условия (окна сообщения) только при столкновении с первым условием?

Лучший способ решения подобных проблем — применение макрокоманд Остановить-Макрос и ЗапускМакроса. ОстановитьМакрос завершает выполнение текущего макроса, что очень удобно для выхода из макроса, если известно, что следующие макрокоманды не применяются. ЗапускМакроса запускает другой макрос, что облегчает выполнение отдель­ной задачи при выполнении конкретного условия.

С помощью команды ОстановитьМакрос можно завершить выполнение макроса AskAboutMissingEmail (вопрос по поводу пропущенного электронного адреса). Вот, что следует сделать для этого.

  1. Применить условие для проверки корректности данных. Если данные корректны, не нужно предпринимать дополнительных шагов и можно выполнить макрокоманду ОстановитьМакрос.

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

На рис. 15.25 показан окончательный макрос.





Рис. 15.25. Исправленный макрос CatchMissingEmail (выявление пропущенного адреса) нуждается в двух макрокомандах — одна для прекращения процесса, если все хорошо, и вторая для отмены обновления, если нажата кнопка No в окне Подтверждающее сообщение

1   ...   39   40   41   42   43   44   45   46   ...   65


написать администратору сайта