Работа с макросами и выражениями в Access 2010

Office 2010

Сводка:  в Microsoft Access 2010 появилась новая возможность — макросы данных, позволяющая создавать макросы, связанные с таблицами. Также был усовершенствован конструктор макросов. Изучите эти возможности и приведенные в статье примеры кода.

Дата последнего изменения: 27 апреля 2015 г.

Применимо к: Access 2010 | Office 2010

Опубликовано:  ноябрь 2010 г.

Содержание

Обзор

В большинстве своем разработчики на Microsoft Access 2010 не любят писать макросы. Макросы, за исключением некоторых обстоятельств (например создание клавиш автоматизации и макроса AutoExec), рассматриваются в мире расширяемости приложений как граждане второго сорта. Макросы нужны пользователям для начального освоения Microsoft Access, чтобы впоследствии перейти к программированию на Microsoft Visual Basic for Applications (VBA). Хотя используемые при написании макросов макрокоманды (производные от объекта DoCmd) соответствуют методам VBA, конструктор макросов выглядит весьма бледно на фоне редактора Visual Basic.

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

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

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

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

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

Если вам приходилось создавать макросы в предыдущих версиях Microsoft Access, вы наверняка помните конструктор макросов, состоящий из трех столбцов (см. рис. 1). Условные операторы добавлялись в столбец Условие, макрокоманды — в столбец Макрокоманда, а указанные параметры — в столбец Аргументы.

Рис. 1. Устаревшая версия конструктора макросов

Устаревшая версия инструмента создания макросов

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

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

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

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

Рис. 3. Каталог макрокоманд

Каталог действий

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

Рис. 4. Команда "Показать все макрокоманды" на ленте

Команда "Показать все действия" на ленте

С помощью элементов управления, расположенных слева от блоков кода, можно свернуть некоторые или даже все блоки кода. Для сворачивания и разворачивания блоков кода также можно воспользоваться соответствующими элементами управления в группе "Развернуть/Свернуть" на ленте. На рис. 5 показан макрос с рис. 2 в свернутом виде.

Рис. 5. Свернутые блоки кода

Свернутые блоки кода

Каталог макрокоманд поддерживает возможность поиска, что позволяет ввести условия поиска, применить необходимые фильтры Microsoft Access и вывести элементы, удовлетворяющие заданным условиям. При поиске в каталоге макрокоманд учитываются не только их имена, но и описания. Например, если ввести в поле поиска условие Запрос, в результатах поиска будут выведены не только макрокоманды со словом Запрос в имени, но и макрокоманды ApplyFilter, GoToRecord и ShowAllRecords, в описании которых встречается слово Запрос.

Чтобы добавить комментарии к макросу, введите // в поле со списком Добавить новую макрокоманду или перетащите узел Комментарии в каталог макрокоманд. Комментарии выделяются зеленым цветом, как показано на рис. 2. Это позволяет легко находить комментарии и отделять разделы процедуры друг от друга. Изменить порядок следования кода в макросе также легко. Просто перетащите блоки кода на новое место либо воспользуйтесь зелеными стрелками вверх и вниз (см. рис. 5) для блоков в области макрокоманд.

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

В конструкторе макросов предыдущих версий Microsoft Access в столбце Условие можно было создавать простые условные операторы. В конструкторе макросов Access 2010 можно создавать более универсальные операторы If путем добавления операторов ElseIf и Else. Чтобы добавить эти операторы, выберите блок If и щелкните в правом нижнем углу блока кода текст ElseIf или Else. Например, если щелкнуть текст ElseIf, откроется диалоговое окно ElseIf. По мере ввода кода в поле условия в приложении Microsoft Access с помощью технологии IntelliSense будут отображаться идентификаторы, функции и другие элементы базы данных.

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

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

  • Функция "Краткие сведения" выводит сведения о правильном синтаксисе для каждого идентификатора в макросе или выражении. Наведите указатель мыши на идентификатор и вы увидите сведения о его объявлении в отдельном диалоговом окне.

  • Функция "Советы" предоставляет дополнительные сведения о компоненте пользовательского интерфейса при выборе значения с помощью автозавершения.

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

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

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

Макросы данных — это новая возможность в Access 2010. Макросы данных позволяют привязывать логику к записям и таблицам (аналогично триггерам в SQL Server). При этом логика пишется один раз, а все формы и код для добавления, обновления и удаления данных в таблице, наследуют эту логику. Макросы данных позволяют реализовывать различные сценарии.

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

  • Сохранение истории изменений записи

  • Создание сообщения электронной почты при изменении значения поля

  • Проверка точности данных в таблице

Устаревшие макросы (здесь: макросы) по-прежнему поддерживаются, хотя вызывать их можно только из события формы, другого макроса, события отчета или кода VBA.

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

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

Рис. 6. SetReturnVar возвращает значения макросам

SetReturnVar возвращает значения в макрос

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

=[ReturnVars]![retrunVar1]
ЗаметкаПримечание

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

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

В таблице 1 перечислены события, поддерживаемые макросами данных.

Таблица 1. Список событий

События

Используется

BeforeChange

Возможные действия:

  • Выдача сообщения об ошибке и блокировка изменений

  • Сравнение старого значения с новым и открытие другой формы

BeforeDelete

Возможные действия:

  • Выдача сообщения об ошибке и отмена удаления

  • Вывод формы для изменения порядка следования элементов

AfterUpdate, AfterInsert, AfterDelete

Возможные действия:

  • Создание сообщения электронной почты

  • Обход в цикле набора записей и обновление их состояния

Чтобы создать макрос данных события, в области навигации слева дважды щелкните имя таблицы, к которой необходимо привязать макрос. На вкладке Таблица в группе События до или События после щелкните событие, в которое необходимо добавить макрос. В Microsoft Access откроется конструктор макросов. Если макрос для этого события уже создан, конструктор макросов откроется для этого макроса.

Чтобы создать именованный макрос данных, в области навигации слева дважды щелкните имя таблицы, к которой необходимо привязать макрос. На вкладке Таблица в группе Именованные макросы нажмите кнопку Именованный макрос и выберите команду Создать именованный макрос. В Microsoft Access откроется конструктор макросов.

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

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

Таблица 2. Образец данных

Имя

Тип

Товар

Text

Количество

Число (Long Integer)

Состояние

Text

Сохраните таблицу и добавьте в столбец Товар указанные ниже данные, оставив остальные столбцы пустыми.

Таблица 3. Добавьте в таблицу указанные данные

Кофе

Сода

Чай

Вода

Чтобы добавить макрос, выберите таблицу, в разделе Работа с таблицами на вкладке Поля щелкните раскрывающийся список Представления и выберите пункт Режим таблицы. В режиме таблицы откройте в разделе Работа с таблицами вкладку Таблица и нажмите кнопку события До изменения. Почему выбрано событие Before Change, а не After Change? Как правило, лучше вызвать событие Before Change для изменения данных и выполнения дополнительного кода, чем позволить таблице обновить запись, а уже ПОТОМ внести дополнительные изменения в ту же запись, которая только что была сохранена в таблицу. Триггер события After Change лучше использовать для подведения итогов и сохранения итоговых значений в другие таблицы. Например, можно пересчитывать итоговые значения по складским запасам при изменении количества товара. В подобных случаях изменения, как правило, вносятся в другую таблицу.

Далее необходимо создать оператор If...Then...Else, который будет срабатывать при каждом внесении изменений в таблицу. На вкладке Товары: до изменения щелкните раскрывающийся список и выберите оператор If. Чтобы добавить в оператор If условие, введите после оператора If букву Т. Обратите внимание на работу технологии IntelliSense. Выберите таблицу Товары. После идентификатора [Товары] введите точку и выберите поле Количество. После поля Количество введите от 50 до 100. При этом будет задано условие, при котором если количество товара окажется в диапазоне от 50 до 100, сработает ветвь оператора If.

В правой части экрана в каталоге макрокоманд выводится список доступных макрокоманд и операторов управления выполнением программы для данного конкретного события. Выберите макрокоманду SetField и перетащите ее в блок оператора If. В поле Имя введите Товары.Состояние. В поле Значение введите "Нехватка товара" (с кавычками). Когда количество товара окажется в диапазоне от 50 до 100 единиц, текст в поле Состояние изменится.

Щелкните оператор If еще раз и обратите внимание, что правом нижнем углу блока появились команды Добавить Else и Добавить Else If. Щелкните команду Добавить Else If, чтобы добавить соответствующий блок. В поле условия введите Товары.Количество<50. Перетащите из каталога макрокоманд макрокоманду SetField в блок Else If. В поле Имя введите Товары.Состояние, а в поле Значение"Заказать немедленно!" (с кавычками). Каждый раз, когда товара останется меньше 50 единиц, текст в поле Состояние будет меняться.

Щелкните оператор Else If и выберите команду Добавить Else. Перетащите макрокоманду SetField в блок Else. В поле Имя введите Элементы.Состояние, а в поле Значение"", пустую строку. Это указывает на то, что если количество товара превышает 100 единиц, поле Состояние должно оставаться пустым. Теперь макрос должен быть подобен приведенному на рис. 7.

Рис. 7. Готовый макрос данных

Завершенный макрос данных

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

Чтобы протестировать макрос, переключитесь в режим таблицы, измените количество товара "Кофе" на 100, щелкните за пределами записи и вы увидите, что текст в поле Состояние изменится на Нехватка товара. Измените количество товара "Сода" на 49, и текст в поле Состояние изменится на Заказать немедленно!. Измените количество товара "Чай" на 101. Поле Состояние останется пустым. Все это проиллюстрировано на рис. 8.

Рис. 8. Изменение поля "Состояние" при изменении количества товара

Состояние поля изменяется по мере изменения количества

Еще одна возможность, поддерживаемая именованными макросами данных — это возможность передачи параметров. Параметры часто используются для повышения производительности базы данных, поскольку они позволяют разработчикам и пользователям принудительно ограничить наборы данных перед выполнением макроса. Это позволяет повысить скорость работы макросов, снизить нагрузку на серверы баз данных и уменьшить сетевой трафик. Параметры также обеспечивают дополнительную гибкость, поскольку позволяют повторно использовать один и тот же макрос без изменений. Чтобы добавить параметры в именованный макрос данных, дважды щелкните таблицу, к которой необходимо привязать макрос. На вкладке Таблица в группе Именованные макросы щелкните раскрывающийся список Именованный макрос и выберите команду Создать именованный макрос. В верхней части конструктора макросов (см. рис. 9) нажмите кнопку Создать параметр.

Рис. 9. Команда "Создать параметр" в конструкторе макросов

Команда "Создать параметр" в инструменте построения макросов

При отладке макросов данных доступно не так много возможностей, как при отладке программного кода. Пошаговое выполнение кода и использование окна сообщений не поддерживается. Однако для поиска ошибок в макросах данных можно воспользоваться таблицей "Журнал приложений" и макрокомандами OnError, RaiseError и LogEvent. Таблица "Журнал приложений" является системной (USysApplicationLog) и по умолчанию не отображается в области навигации. При возникновении ошибки в макросе данных можно просмотреть сведения в таблице "Журнал приложений" и определить, что произошло.

Чтобы вывести таблицу "Журнал приложений", откройте вкладку Файл, чтобы переключиться в представление Backstage. На вкладке Сведения нажмите кнопку Просмотр таблицы журнала приложения. Если кнопка Просмотр таблицы журнала приложения не отображается, это означает, что таблица "Журнал приложений" для текущей базы данных еще не создана. При записи в журнал какого-либо события, например с помощью макрокоманд LogEvent или RaiseError, эта кнопка появится на вкладке Сведения.

Построитель выражений

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

В Access 2010 построитель выражений претерпел существенные изменения. Усовершенствованный построитель выражений (см. рис. 10) позволяет создавать выражения быстрее и с меньшим количеством ошибок.

Рис. 10. Построитель выражений в Access 2010

Инструмент построения выражения в Access 2010

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

Кроме того, новый пользовательский интерфейс поддерживает прогрессивное раскрытие, т. е. отображение только функций и свойств, существующих в определенном контексте. В предыдущих версиях Microsoft Access для всех контекстов, в которых использовалось выражение, применялся единый общий вычислитель выражений. Это означает, что независимо от того, где используется выражение, доступные пользователю функции и операторы будут в большинстве случаев одни и те же. В Access 2010 построитель выражений является контекстно-зависимым. Например, функция FormatDateTime недоступна в контексте таблицы, но доступна во всех остальных контекстах. Также обратите внимание, что кнопки операторов исчезли (рис. 10). Операторы теперь доступны на панели "Элементы выражений". Все эти изменения позволяют не загромождать интерфейс, предоставить пользователям более осмысленный выбор и увеличить область редактирования.

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

Рис. 11. Значок построителя выражений

Значок инструмента построения выражений

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

Рис. 12. При вводе отображается раскрывающийся список параметров

При вводе отображается раскрывающийся список параметров

Дополнительные сведения о выражениях и о работе с построителем выражений можно найти в справке к Access 2010.

Упрощение работы с макросами и выражениями

Благодаря внесенным в новый конструктор макросов усовершенствованиям создание макросов стало проще, чем когда-либо, как для новичков, так и для опытных разработчиков на Microsoft Access. Добавление конструкций Else и Else If придало макросам еще больше гибкости. А благодаря новому каталогу макрокоманд и поддержке технологии IntelliSense теперь можно не запоминать часто используемые команды и макрокоманды. Кроме того, создание выражений в усовершенствованном построителе выражений стало более удобным. В целом можно сказать, что все эти усовершенствования позволяют эффективнее использовать функции создаваемых баз данных.

Дополнительные материалы

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

Показ: