Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БазыДанных(заочка) / Базы данных (учебное пособие).doc
Скачиваний:
194
Добавлен:
17.04.2015
Размер:
1.61 Mб
Скачать

3.2.7. Макросы в Access

Access предоставляет пользователям два средства автомати­зации работы с базами данных: язык макросов и язык Visual Basic for Applications (VBA).

Язык VBA имеет преимущества перед языком макросов. Несмотря на это последний можно использовать для создания сложных программ и для автоматизации большинства операций по управлению базой дан­ных.

В отличие от Excel и Word, в Access автоматическая запись макросов не выполняется.

Окно макросов открывается в результате нажатия кнопки Соз­дать на вкладке Макросы окна базы данных. Оно включает четыре столбца: Имя макроса, Условия, Макрокоманда и Примечание. При созда­нии нового макроса по умолчанию отображаются только столбцы Мак­рокоманда и Примечание. Показ остальных столбцов можно установить, используя команды Имя макроса и Условия из меню Вид или же однои­менные кнопки на панели инструментов Создание макроса.

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

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

Создание макросов. После нажатия кнопки Создать на вкладке Макросы пользователь получает доступ к бланку макроса. В каждой строке этой таблицы размещается одна макрокоманда. Для определения ее параметров пользователь должен заполнить предложенные программой формы в нижней части бланка. Чаще всего оператору СУБД удается определить все параметры макрокоманды «по ходу дела», не штудируя справочник.

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

1.Щелчок по кнопке Запуск на панели инструментов ( на ней изображен восклицательный знак).

2.Вызов команды Запуск макроса из меню Сервис.

3.Маркировка имени макроса и нажатие кнопки Запуск на вклад­ке Макросы окна базы данных.

4.Двойной щелчок на имени, запускаемого макроса.

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

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

Кнопка с контекстным меню. С элементом управления (в частности, с кнопкой) может быть связано контекстное меню с командами, определенными пользовате­лем. Каждая из них будет запускать на выполнение макрос или подпро­грамму Visual Basic. Опре­делим последовательность действий, которые нужно выполнить, чтобы создать такое меню, связанное с кнопкой. Предположим, что в меню должны входить три команды, которые за­пускают макросы Макро-1, Макро-2 и Макро-3.

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

  1. Открыть форму в режиме конструктора и создать новую кнопку.

  2. Раскрыть окно свойств кнопки и определить ее подпись, на­пример «Но­вое меню».

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

  4. Указать шаблон «Пустая строка меню».

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

  6. Напечатать в строке Название имя первой команды меню. В нашем примере это Команда меню 1. Нажать кнопку с изображением стрелки вправо. Название команды появится в нижней части окна с от­ступом. Это является признаком команды меню, в отличие от имени меню, которое выводится без отступа.

  7. В строке Макрокоманда выбрать из списка ЗапускМакроса.

  8. В строке Аргументы ввести имя макроса Макро-1 и нажать кнопку Далее.

  9. Повторить пункты 5—8 для второго и третьего элементов меню, задав соответствующие названия команд и имена макросов.

10. Нажать кнопку ОК и ввести в открывшемся окне Сохра­нение назва­ние меню, например «Новое меню».

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

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

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

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

Access имеет обширный набор макрокоманд, обсуждение которых выходит за рамки данного пособия.

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

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

Отладка макроса. Макрос не всегда функционирует так, как было задумано. Можно выделить две категории ошибок в макросах: - синтаксические; - логические.

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

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

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

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

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

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

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

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

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

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

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

- Открыть окно конструктора макроса, в которое должны быть помещены группируемые макросы.

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

- В первую ячейку столбца Имя макроса ввести имя первого макроса.

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

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

- Написать остальные макросы и сохранить макрогруппу с по­мощью команды Сохранить как из меню Файл, задав, имя.

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

Вызов макроса из макрогруппы осуществляется путем указания точных имен макрогруппы и макроса в группе. Эти имена разделяются точкой. Если макрогруппа в окне базы данных имеет имя Все макро­сы, а необходимый макрос - имя Тест1, то для вызова последнего необходимо:

- вызвать команду Запуск макроса из меню Сервис;

- в открывшемся диалоговом окне ввести текст Все макросы. Тест1;

- запустить макрос, щелкнув на кнопке ОК.

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

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

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

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

События в Access. В базе данных хранится информация о состоянии ее объектов. Любое изменение состояния формы или отчета называется событием. Каждый из этих объектов имеет свой набор событий.

Поскольку макросы часто требуется «привязывать» к событиям, разработ­чик базы данных должен иметь представление о том, какие со­бытия вообще существуют. Это позволит составить план разработки приложения и выбрать верный путь решения пользовательских задач — запрограммировать реакцию СУБД на действия пользователя и обеспечить доступ оператора к инструмен­там и подпрограммам. Можно выделить события, связанные с клавиатурой и мышью; события данных; события управления объектами; события печати.

Связывание макросов с событиями. С событиями удобно связывать макросы. Если необходимо выполнить макрос при загрузке базы данных, то этому макросу необходимо присвоить имя Autoexec (макрос с таким именем автоматически выполняется при загрузке базы данных). При этом можно произвольным образом пользоваться строчными и пропис­ными буквами. При каждом открытии базы данных Access проверяет, присутствует ли в ней макрос с именем AutoExec, и, ес­ли находит, выполняет его. В противном случае открытие базы не сопровождается дополнительными действиями. Внутри одной базы дан­ных можно использовать только один макрос AutoExec.

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

Макрос AutoExec не выполняется, если перед открытием база данных нажать и удерживать клавишу [Shift].

Выполнение макроса с условием. Порядок выполнения макрокоманд, содержащихся в макросе, оп­ределяется условиями, задаваемыми в столбце Условие - это логи­ческое выражение, принимающее значение True или False. Посредс­твом условий осуществляется управление запуском и выполнением макроса.

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

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

Управление представлением объектов из макроса. Немалую роль в создании комфортных условий работы в среде Access играет представление на экране окон. При работе с ката­логом телефонов клиентов наиболее удобно полноэкранное представ­ление окна формы. При этом пользователь сразу увидит значительную часть информации. Установить такой режим представления формы мож­но с помощью простого макроса с использованием макрокоманды Развернуть. Есть и другие способы выбора представления окна посредством макроса. Задать представление окна формы можно с помощью аргумен­та Режим окна макрокоманды ОткрытьФорму. Доступны следующие зна­чения аргумента Режим окна:

Значение аргумента

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

Normal (Обычный)

Соответствует установкам в окне свойств формы

Hidden (Скрытый)

Соответствует команде Скрыть из меню Окно

Ikon (Пиктограмма)

Представление в свернутом виде

Dialog (Диалоговый)

Определение окна формы как модельного или всплывающего

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

Значение Normal устанавливается по умолчанию. В этом случае можно задать местоположение и размер окна с помощью специальной команды MoveSize (Сдвиг/Размер). Местоположение открываемого окна определяется путем указания расстояния по вертикали вниз (аргу­мент Down) и по горизонтали вправо (аргумент Right) от левого верхнего угла окна Access. Размер окна по вертикали равен зна­чению аргумента Height, а по горизонтали - значению аргумента Width. В качестве единицы измерения используются сантиметры или дюймы (в зависимости от установок в Control Panel Windows). Обозначения единиц измерения вводить не обязательно, они вставля­ются автоматически при переходе к полю следующего аргумента.

Команда MoveSize не воздействует на окно формы, если перед ее выполнением для аргумента Режим окна макрокоманды Отк­рытьФорму было установлено значение Окно диалога.

Указание имен объектов. Чтобы сослаться на элемент или свойство объекта базы данных, необходимо знать его точное имя. Имена элементов должны быть уни­кальными в одной форме (отчете) и могут совпадать в разных формах (отчетах). При создании ссылки на элемент управления необходимо учитывать, какой объект базы данных является активным.

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

[Тип_ Объекта]![Имя_ Объекта]![Имя_ Элемента]

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

[Reports]! [Имя_ Объекта]![Имя_ Элемента]

Вызов приложений и управление ими. С помощью макроса можно запустить из Access приложения Mic­rosoft Office, а также программы, работающие под управлением Windows или DOS, например, чтобы выполнить некото­рые вычисления (с помощью Excel) или сделать небольшие заметки посредством редакторов Notepad и Word. Вызов выполняется оди­наково во всех случаях и заключается главным образом в указании имени запускаемой программы. Макрос для вызова прикладной прог­раммы можно связать с кнопкой формы, таким образом, ускорив доступ к нужному приложению.

Запуск прикладных программ с параметрами. Запуская прикладные программы с помощью макрокоманды Запуск_ Приложений, можно указывать ключи, которые обычно вводятся в ко­мандной строке после имени программы при запуске с уровня DOS. Эти ключи служат для задания режима работы прикладной программы. Если, к примеру, из макроса запускается редактор Word, то па­раметр /t имя_документа применяется для загрузки документа с ука­занным именем, который используется в качестве шаблона. Ключ /n указывается при запуске Word без открытия нового документа. Способ указания ключей в аргументе Command Line такой же, как в командной строке DOS, например:

C:\Program Files\Microsoft Office\0ffice\winword.exe /n Использование ключей допускается при запуске большинства прикладных программ.

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

С помощью макрокоманды КомандыКлавиатуры пользователь может передать в Access или в другую прикладную программу любую последователь­ность нажатий клавиш, которая, однако, не должна превышать 255 символов. Обозначения отдельных клавиш заключаются в фигурные скобки. Для обозначения клавиш [Alt], [Ctrl] и [Shift] использу­ются следующие символы: Alt - %; Ctrl - ^; Shift - + .

Остальные клавиши обозначаются следующим образом:

Backspace - {BACKSPACE}; Del - {DEL}; End - {END}; Esc - {ESC}; «Влево» - {LEFT}; Home - {HOME}; Page Down - {PGDN}; Print Screen - {PRTSC}; Scroll Lock - {SCROLLOCK}; «Вверх» - {UP}; A - Z - {A} – {Z}; Break - {BREAK}; «Вниз» - {DOWN}; Enter - {ENTER}; Help - {HELP}; Num Lock - {NUMLOCK}; Ins - {INSERT}; Page Up - {PGUP}; «Вправо» - {RIGHT}; Tab - {TAB}; F1 – F15 - {F1} – {F15}; 0 – 9 - {0} –{9}.

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

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

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

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

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

На третьем этапе необходимо составить макрос, формирующий и обс­луживающий пользовательскую строку меню.