Запустить макрос в access из excel
Макрос "ЗапускМакроса" можно использовать в базах данных Access для запуска макрос. Макрос может быть в группа макросов.
Эта макрокоманда используется в следующих случаях:
чтобы запустить макрос из другого макроса;
чтобы выполнить макрос при возникновении определенных условий;
чтобы привязать макрос к команде пользовательского меню или ленты.
Настройка
Макрокоманда ЗапускМакроса имеет следующие аргументы:
Аргумент макрокоманды
Имя макроса
Имя макроса. В поле Имя макроса в разделе Аргументы макрокоманды в окне конструктора макросов отображаются все макросы (и их группы), доступные в текущей базе данных. Если макрос включен в группу макросов, он указывается в списке с именем этой группы в формате ИмяГруппыМакросов.ИмяМакроса. Это обязательный аргумент.
При запуске макроса, содержащего макрос "ЗапускМакроса" в макросе база данных библиотеки, Access ищет макрос с этим именем в базе данных библиотеки и не ищет его в текущей базе данных.
Число повторов
Максимальное количество повторов выполнения макроса. Если для данного аргумента значение не указано и при этом поле аргумента Условие повтора также оставлено пустым, макрос выполняется один раз.
Условие повтора
Результат выражение, который оценивается как "Истина" (–1) или "Ложь" (0). Макрос перестает работать, если выражение ложно. Выражение вычисляется каждый раз при запуске макроса.
Примечания
Если в поле аргумента Имя макроса введено имя группы макросов, будет выполнен первый макрос в этой группе.
Действие этой макрокоманды аналогично выбору на вкладке Инструменты для баз данных команды Выполнить макрос с последующим выбором нужного макроса и нажатием кнопки ОК. Однако при выборе этой команды макрос выполняется только один раз, в то время как макрокоманда Выполнить макрос позволяет выполнить макрос произвольное число раз.
С помощью аргументов "Число повторов" и "Условие повтора" можно определить, сколько раз будет выполняться макрос:
Если оба аргумента оставлены пустыми, макрос выполняется один раз.
Если для аргумента Число повторов задано значение, а поле аргумента Условие повтора оставлено пустым, макрос выполняется заданное число раз.
Если оставить значение Число повторов пустым, но ввести выражение для аргумента Условие повтора, макрос будет выполняться, это выражение не примет значение Ложь.
Если указаны значения обоих аргументов, макрос будет выполняться столько раз, сколько указано в поле Число повторов, если до этого момента выражение в поле Условие повтора не примет значение Ложь.
Когда при выполнении макроса, содержащего макрокоманду ЗапускМакроса, приходит очередь макрокоманды ЗапускМакроса, выполняется вызванный макрос. По завершении его работы выполнение исходного макроса продолжается со следующей макрокоманды.
Макрос может вызвать макрос, относящийся к той же группе макросов или к другой группе.
Макросы можно вкладывать друг в друга. Это означает, что можно выполнить макрос А, который вызовет макрос Б и так далее. В каждом случае по завершении выполнения вызванного макроса продолжается выполнение вызвавшего его макроса со следующей макрокоманды.
Чтобы выполнить макрокоманду ЗапускМакроса в модуле Visual Basic для приложений (VBA), используйте метод RunMacro объекта DoCmd.
Весьма частый случай на практике: вам нужно запускать один или несколько ваших макросов в заданное время или с определенной периодичностью. Например, у вас есть большой и тяжелый отчет, который обновляется полчаса и вы хотели бы запускать обновление за полчаса до вашего прихода на работу утром. Или у вас есть макрос, который должен делать автоматическую рассылку сотрудникам с заданной периодичностью. Или, работая со сводной таблицей, вы хотите, чтобы она обновлялась "на лету" каждые 10 секунд и т.д.
Давайте разберемся с тем, какие в Excel и Windows есть возможности для реализации подобного.
Запуск макроса с заданной частотой
Для этого проще всего использовать встроенный в VBA метод Application.OnTime, который запускает заданный макрос в указанный момент времени. Давайте разберемся с этим на практическом примере.
Откройте редактор Visual Basic одноименной кнопкой на вкладке Разработчик (Developer) или сочетанием клавиш Alt + F11 , вставьте новый модуль через меню Insert - Module и скопируйте туда следующий код:
Давайте разберемся что здесь что.
Для начала, нам нужна переменная, где будет храниться время следующего запуска нашего макроса - я назвал её TimeToRun. Обратите внимание, что содержимое этой переменной должно быть доступно всем нашим последующим макросам, поэтому её надо сделать глобальной, т.е. объявить в самом начале модуля до первого Sub.
Дальше идет наш главный макрос MyMacro, который будет выполнять основную задачу - пересчитывать книгу с помощью метода Application.Calculate. Чтобы было нагляднее, я добавил на лист в ячейку А1 формулу =ТДАТА(), которая выводит дату и время - при пересчете её содержимое будет обновляться прямо у нас на глазах (только включите отображение секунд в формате ячейки). Для дополнительного веселья я добавил в макрос еще и команду заливки ячейки А1 случайно выбранным цветом (код цвета - это целое числов в диапазоне 0..56, которое генерит функция Rnd и округляет до целого числа функция Int).
Макрос NextRun добавляет к предыдущему значению TimeToRun еще 3 секунды и затем назначает следующий запуск главного макроса MyMacro на это новое время. Само-собой, на практике можно использовать любые другие нужные вам временные интервалы, задавая аргументы функции TimeValue в формате "чч:мм:сс".
Ну и, наконец, просто для удобства добавлены еще макросы запуска последовательности Start и её завершения Finish. В последнем из них для прерывания последовательности используется четвёртый аргумент метода OnTime равный False.
Итого, если запустить макрос Start, то вся эта карусель завертится, и мы увидим на листе вот такую картину:
Остановить последовательность можно, запустив, соответственно макрос Finish. Для удобства можно обоим макросам назначить сочетания клавиш, используя команду Макросы - Параметры на вкладке Разработчик (Developer - Macros - Options) .
Запуск макроса по расписанию
Само-собой, всё описанное выше возможно только в том случае, если у вас запущен Microsoft Excel и в нём открыт наш файл. Теперь давайте рассмотрим более сложный случай: нужно по заданному расписанию, например, каждый день в 5:00 запускать Excel, открывать в нем большой и сложный отчет и обновлять в нем все связи и запросы, чтобы к нашему приходу на работу он был уже готов :)
В такой ситуации лучше воспользоваться Планировщиком Windows - специально встроенной в любую версию Windows программой, которая умеет по расписанию выполнять заданные действия. По факту, вы уже используете его, сами того не зная, ведь ваш ПК регулярно проверяет обновления, качает новые антивирусные базы, синхронизирует облачные папки и т.д. - это всё работа Планировщика. Так что наша задача сводится к тому, чтобы добавить к уже имеющимся задачам ещё одну, которая будет запускать Excel и открывать в нём заданный файл. А мы с вами повесим наш макрос на событие Workbook_Open этого файла - и задача решена.
Хочу сразу предупредить, что для работы с Планировщиком, возможно, потребуются расширенные пользовательские права, поэтому, если вы не можете найти описанных ниже команд и функций у себя на рабочем компьютере в офисе - обратитесь за помощью к вашим IT-специалистам.
Запускаем Планировщик
Итак, давайте запустим Планировщик. Для этого можно либо:
- Щелкнуть правой кнопкой мыши по кнопке Пуск и выбрать Управление компьютером (Computer management)
- Выбрать в Панели управления: Администрирование - Планировщик заданий (Control Panel - Administrative Tools - Task Scheduler )
- Выбрать в главном меню Пуск - Стандартные - Служебные - Планировщик заданий
- Нажать сочетание клавиш Win + R , ввести taskschd.msc и нажать Enter
На экране должно появиться примерно такое окно (у меня англоязычная версия, но у вас может быть и русскоязычная):
Создаем задачу
Чтобы создать новую задачу с помощью простого пошагового мастера нажмем на ссылку Создать простую задачу (Create Basic Task) в правой панели.
На первом шаге мастера нужно ввести название и описание создаваемой задачи:
Жмем на кнопку Далее (Next) и на следующем шаге выбираем триггер - частоту запуска или событие, которое будет запускать нашу задачу (например, включение компьютера):
Если вы выбрали Ежедневно (Daily) , то на следующем шаге нужно будет выбрать конкретное время, дату начала последовательности и шаг (каждый 2-й день, 5-й день и т.д.):
Следующий шаг - выбираем действие - Запуск программы (Start a program) :
И, наконец, самое интересное - что именно нужно открывать:
-
Щелкнуть правой кнопкой мыши по иконке (ярлычку) запуска Excel на рабочем столе или в панели задач и выбрать команду Свойства (Properties) , а затем в открывшемся окне скопировать путь из строки Target:
Когда всё ввели, то жмем Далее и затем Готово (Finish) . Задача должна добавиться в общий список:
Управление созданной задачей удобно осуществлять с помощью кнопок справа. Здесь можно протестировать задачу, запустив её немедленно (Run), не дожидаясь наступления заданного срока. Можно временно деактивировать задачу (Disable), чтобы она перестала выполняться на время, например, вашего отпуска. Ну, и изменить параметры (даты, время, имя файла) тоже всегда можно через кнопку Свойства (Properties) .
Добавляем макрос на открытие файла
Теперь осталось повесить в нашей книге запуск нужного нам макроса на событие открытия файла. Для этого откроем книгу и перейдем в редактор Visual Basic с помощью сочетания клавиш Alt + F11 или кнопки Visual Basic на вкладке Разработчик (Developer) . В открывшемся окне в левом верхнем углу нужно найти наш файл на дереве и двойным щелчком мыши открыть модуль ЭтаКнига (ThisWorkbook) .
Если у вас в редакторе Visual Basic не видно этого окна, то его можно открыть через меню View - Project Explorer.
В открывшемся окне модуля добавим обработчик события открытия книги, выбрав его из выпадающих списков в верхней части Workbook и Open, соответственно:
На экране должна появиться заготовка процедуры Workbook_Open, куда между строчками Private Sub и End Sub и нужно вставить те команды на VBA, которые должны автоматически выполняться при открытии этой книги Excel, когда её по расписанию откроет Планировщик. Вот несколько полезных вариантов для разгона:
-
ThisWorkbook.RefreshAll - обновление всех внешних запросов к данным, запросов Power Query и сводных таблиц. Самый универсальный вариант. Только не забудьте разрешить по умолчанию подключения к внешним данным и обновление связей через Файл - Параметры - Центр управления безопасностью - Параметры центра управления безопасностью - Внешнее содержимое, иначе при открытии книги появится стандартное предупреждение и Excel, ничего не обновляя, будет ждать от вас благословления в виде нажатия на кнопку Включить содержимое (Enable content) :
Если вы хотите, чтобы макрос выполнялся только при открытии файла Планировщиком в 5:00, а не каждый раз при открытии книги пользователем в течение рабочего дня, то имеет смысл добавить проверку на время, например:
Вот и всё. Не забудьте сохранить книгу в формате с поддержкой макросов (xlsm или xlsb) и можно смело закрывать Excel и отправляться домой, оставив компьютер включенным. В заданный момент (даже если ПК заблокирован) Планировщик запустит Excel и откроет в нём заданный файл, а наш макрос выполнит запрограммированные действия. А вы будете нежиться в постели, пока ваш тяжелый отчёт автоматически пересчитывается - красота! :)
Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
-
Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.
Способ 2. Запись макросов макрорекордером
Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
- в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
- Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
- В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button) :
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Создавая базу данных, вы обычно начинаете с создания нескольких объектов базы данных, таких как таблицы, формы и отчеты. Рано или поздно наступает момент, когда нужно добавить программный код, чтобы автоматизировать определенные процессы и связать объекты базы данных друг с другом. Прочитав эту статью, вы получите представление о средствах программирования в Access.
В этой статье
Программирование
Программирование в Access — это процесс добавления функций в базу данных с помощью макроса Access или кода VBA Visual Basic для приложений (VBA). Предположим, например, что вы создали форму и отчет и хотите добавить в форму кнопку, при нажатии на которую открывается отчет. В данном случае программированием является создание макроса или процедуры VBA с настройкой свойства события OnClick для запуска макроса или процедуры нажатием кнопки. Для простой операции, например открытия отчета, можно воспользоваться мастером кнопок для работы или отключить мастер и программировать его самостоятельно.
Примечание: Во многих программах Microsoft Office термин "макрос" относится к коду VBA. Это может запутать пользователей Access, так как в этом приложении термин "макрос" относится к именованному набору макрокоманд, для создания которого используется конструктор макросов. Макрокоманды Access — это лишь часть команд, доступных в VBA. Конструктор макросов обладает более структурированным интерфейсом, чем редактор Visual Basic, что позволяет добавлять программный код к элементам управления и объектам без необходимости изучать код VBA. Следует помнить, что в статьях справки Access макросы Access называются просто макросами. С другой стороны, код VBA может называться VBA, кодом, функцией или процедурой. Код VBA содержится в модулях классов (это части отдельных форм и отчетов, обычно содержащие код только для этих объектов), а также в модулях (они не привязаны к определенным объектам и обычно содержат "глобальный" код, который можно использовать во всей базе данных).
Объекты, например формы и отчеты, и элементы управления, такие как кнопки и текстовые поля, обладают разными свойствами событий, к которым можно прикреплять макросы или процедуры. Каждое свойство события связано с определенным событием, например со щелчком мышью, открытием формы или изменением данных в текстовом поле. События могут также инициироваться факторами извне Access, например системными событиями, а также макросами или процедурами, прикрепленными к другим событиям. Если добавить много макросов или процедур к нескольким свойствам событий для большого числа объектов, база данных может получиться сложной, но в большинстве случаев для достижения нужных результатов потребуются минимальные усилия по программированию.
Выбор в пользу макросов или кода VBA
Решение в пользу макросов, кода VBA или обоих методов зависит главным образом от того, как вы планируете развертывать и распространять базу данных. Например, если база данных хранится на вашем компьютере, вы единственный пользователь и хорошо разбираетесь в коде VBA, целесообразно использовать VBA для большинства задач по программированию. Если же вы собираетесь поделиться базой данных с другими людьми, разместив ее на файловом сервере, возможно, лучше обойтись без VBA из соображений безопасности.
Принимая решение об использовании макросов или кода VBA, вы должны учесть два аспекта: безопасность и необходимую функциональность. Безопасности следует уделить особое внимание, так как VBA можно использовать для создания кода, который способен нарушить защиту данных или повредить файлы на локальном компьютере. Если вы используете базу данных, созданную не вами, не включайте код VBA, если не уверены в том, что база данных получена из надежного источника. Создавая базу данных, предназначенную для других людей, не используйте средства программирования, которые могут привести к тому, что пользователям потребуется явно предоставить ей статус надежной. Чтобы избежать такой ситуации, воспользуйтесь распространенными приемами, описанными ниже в этом разделе.
Чтобы обеспечить безопасность базы данных, применяйте макросы везде, где это возможно, а программирование с помощью VBA используйте только для операций, которые невозможно выполнить с помощью макрокоманд. Более того, следует использовать только такие макрокоманды, для выполнения которых не требуется предоставлять базе данных статус надежной. При таком ограничении использования макрокоманд пользователи будут уверены в том, что база данных не содержит программного кода, который может повредить данные или другие файлы на их компьютерах.
Рекомендации по использованию макросов
Начиная с выпуска 2010 в Access предлагается много новых макрокоманд, с помощью которых можно создавать более функциональные макросы, чем в более ранних версиях приложения. Например, теперь можно с помощью макрокоманд создавать и использовать глобальные временные переменные, а также более изящно обрабатывать ошибки, применяя новые специализированные макрокоманды. В более ранних версиях Access это можно было сделать только с помощью кода VBA. Кроме того, можно внедрить макрос прямо в свойство события объекта или элемента управления. Внедренный макрос становится частью объекта или элемента управления и сохраняется при их перемещении и копировании.
Макрос — это простой способ выполнения многих задач программирования, таких как открытие и закрытие форм и запуск отчетов. Вы можете быстро и легко связать созданные объекты базы данных (формы, отчеты и т. д.), так как вам не нужно помнить о синтаксисе. Аргументы для каждой макро макроки отображаются в конструкторе макроса.
Макросы обеспечивают повышенную безопасность и просты в использовании. Кроме того, их необходимо применять для выполнения следующих задач:
Назначение действия или набора действий ключу. Для этого необходимо создать группу макросов с именем AutoKeys.
Выполнение действия или последовательности действий при первом открытии базы данных. Для этого необходимо создать макрос с именем AutoExec.
Примечание: Макрос AutoExec запускается раньше, чем любой другой макрос или код VBA, даже если вы назначили в диалоговом окне Параметры Access начальную форму и прикрепили к ее событию OnOpen или OnLoad макрос или код VBA.
Дополнительные сведения о создании макросов см. в разделе Макросы.
Рекомендации по использованию VBA
Программный код VBA следует использовать вместо макросов, если вы хотите сделать следующее:
Использовать встроенные функции или создать собственные. В Access есть множество встроенных функций, например IPmt, которая вычисляет процентные платежи. С помощью этих встроенных функций можно выполнять вычисления, не создавая сложных выражений. Используя код VBA, вы также можете создать собственные функции для выполнения вычислений, которые требуют создания слишком сложных выражений или не могут быть выполнены с их помощью. Кроме того, созданные функции можно включать в выражения, что позволяет выполнять часто используемые операции с разными объектами.
Создавать объекты и обрабатывать их. Вы увидите, что в большинстве случаев проще всего создать или изменить объект в режиме конструктора. Но в некоторых случаях вам может потребоваться изменить определение объекта в коде. С помощью VBA можно обрабатывать все объекты в базе данных, а также манипулировать самой базой данных.
Выполнять действия на уровне системы. Чтобы запустить из Access другую программу (например, Microsoft Excel), можно выполнить макрос с макрокомандой RunApp, но в целом возможности применения макросов для выполнения действий вне Access ограничены. С помощью VBA можно проверить, существует ли на компьютере определенный файл, воспользоваться технологией Automation или DDE для взаимодействия с другими программами для Microsoft Windows, такими как Excel, и вызвать функции из библиотек DLL в Windows.
Обрабатывать записи поочередно. Используя код VBA, можно обработать набор записей, выполнив поочередно операцию над каждой из них. В то же время макрос обрабатывает все записи из набора одновременно.
Выполнение распространенных задач программирования с помощью мастера кнопок
Добавьте в форму кнопку, и мастер кнопок поможет вам приступить к программированию. С помощью мастера вы сможете создать кнопку для выполнения определенной задачи. В файле Access (ACCDB) мастер создает макрос, внедренный в свойство OnClick этой кнопки. В MDB- или ADP-файле мастер создает код VBA, так как в этих форматах не поддерживаются внедренные макросы. В любом случае вы можете затем изменить или дополнить макрос или код VBA в соответствии со своими потребностями.
В области навигации щелкните правой кнопкой мыши форму, в которую нужно добавить кнопку, и выберите пункт Конструктор.
На вкладке Конструктор щелкните стрелку вниз, чтобы открыть коллекцию Элементы управления, и убедитесь в том, что пункт Использовать мастера выделен.
На вкладке Конструктор в коллекции Элементы управления щелкните элемент Кнопка.
На бланке формы щелкните там, где нужно поместить кнопку.
Откроется мастер кнопок.
На первой странице мастера в списке Категории щелкните каждую категорию, чтобы посмотреть, какие действия можно запрограммировать для кнопки. В списке Действия выберите нужное действие, а затем нажмите кнопку Далее.
Выберите параметр Текст или Рисунок в зависимости от того, что нужно отобразить на кнопке.
Если вы хотите отобразить текст, то можете изменить содержимое поля рядом с параметром Текст.
Если вам нужен рисунок, мастер предложит изображение в соответствующем списке. Если вы хотите выбрать другой рисунок, установите флажок Показать все рисунки, чтобы отобразить список всех доступных в Access изображений для кнопок, или нажмите кнопку Обзор, чтобы выбрать рисунок, сохраненный в отдельном файле.
Введите понятное имя для кнопки. Это необязательный шаг, и это имя не отображается на кнопке. Тем не менее рекомендуем указать понятное имя, чтобы было легко отличить эту кнопку от других позже (например, при настройке последовательности табуляции для элементов управления формы). Например, если кнопка закрывает форму, можно назвать ее cmdClose или CommandClose.
Кнопка будет размещена в форме.
Если вы хотите просмотреть программный код, созданный мастером, можно сделать следующее:
Если окно свойств не отображается, нажмите клавишу F4.
В окне свойств откройте вкладку События.
В окне свойства "По щелчку" нажмите кнопку "Построить" .
Откроется конструктор макросов, в котором будет показан макрос, созданный мастером. При желании макрос можно изменить (дополнительные сведения о редактировании макросов см. в разделе Макросы). Когда вы закончите, на вкладке Конструктор в группе Закрыть нажмите Закрыть, чтобы закрыть конструктор макросов. Если будет предложено сохранить изменения и обновить свойство, нажмите Да, чтобы сделать это, или Нет, чтобы отказаться.
На вкладке Конструктор в группе Режимы нажмите кнопку Режим и выберите пункт Режим формы. Нажмите новую кнопку, чтобы проверить, правильно ли она работает.
Макросы
Макрос — это инструмент, позволяющий автоматизировать задачи и добавлять функции в формы, отчеты и элементы управления. Например, если добавить в форму кнопку, то можно связать ее свойство события OnClick с макросом и включить в него команды, которые должны выполняться при нажатии этой кнопки.
Макросы Access можно рассматривать как упрощенный язык программирования, код на котором создается в виде списка необходимых действий. Создавая макрос, вы выбираете каждую макрокоманду из раскрывающегося списка, а затем вводите для нее необходимую информацию. С помощью макросов можно добавлять функции в формы, отчеты и элементы управления без необходимости писать код в модуле VBA. В макросах доступно подмножество команд VBA, и большинство людей считают, что создать макрос легче, чем написать код VBA.
Создать макрос можно с помощью конструктора макросов, который показан на этом рисунке:
Вот как можно открыть конструктор макросов:
на вкладке Создание в группе Макросы и код нажмите кнопку Макрос.
Код VBA
Как и макросы, код VBA можно использовать в Access для автоматизации и добавления функций. Вы можете расширить возможности VBA за счет элементов управления сторонних поставщиков, а также создать собственные функции и процедуры для конкретных целей.
Самый быстрый способ приступить к написанию программного кода VBA — создать макрос Access, а затем преобразовать его в код VBA. Инструкции см. в разделе Преобразование макросов в код VBA. В этом случае будет создан модуль VBA, который выполняет те же операции, которые определены в макросе. Кроме того, откроется редактор Visual Basic, так что вы сможете приступить к редактированию процедуры. При работе в редакторе Visual Basic можно щелкнуть интересующее вас ключевое слово и нажать клавишу F1, чтобы открыть справку разработчика Access и ознакомиться с соответствующей статьей. Затем вы можете продолжить изучение справки разработчика Access и узнать о новых командах, которые пригодятся для ваших задач.
Преобразование макросов в код VBA
В Access можно автоматически преобразовать макросы в модули VBA или модули классов. Вы можете преобразовать макросы, прикрепленные к форме или отчету, независимо от того, внедрены они или являются отдельными объектами. Кроме того, можно преобразовать глобальные макросы, которые не прикреплены к конкретной форме или отчету.
Примечание: Веб-базы данных поддерживают код Visual Basic для приложений (VBA), но его невозможно запустить, когда такая база данных работает в браузере. Чтобы выполнить код VBA, который содержится в веб-базе данных, ее необходимо открыть в Access. Для задач, связанных с программированием, в веб-базах данных следует использовать макросы Access.
Преобразование макросов, прикрепленных к форме или отчету
Этот процесс преобразует в VBA все макросы, на которые ссылается форма, отчет или любой из их элементов управления (либо которые внедрены в форму, отчет или элемент управления), а затем добавляет код VBA в модуль класса формы или отчета. Модуль класса становится частью формы или отчета и сохраняется при их перемещении или копировании.
В области навигации щелкните форму или отчет правой кнопкой мыши и выберите пункт Конструктор.
На вкладке Конструктор в группе Сервис нажмите Преобразовать макросы формы или Преобразовать макросы отчета.
Если модуль класса для формы или отчета не существует, access создаст его и добавит в модуль процедуру для каждого макроса, связанного с формой или отчетом. Кроме того, Access изменяет свойства событий формы или отчета таким образом, чтобы они запускали новые процедуры VBA вместо макроса.
Чтобы просмотреть и изменить код VBA, сделайте следующее:
Форма или отчет должны быть по-прежнему открыты в режиме конструктора. Если окно свойств не отображается, нажмите клавишу F4.
На вкладке "События" окна свойств щелкните любое поле свойства, в которое будет отображаться [Процедура мероприятия],и нажмите кнопку сборки . Чтобы просмотреть свойства событий для определенного элемента управления, щелкните его, чтобы выбрать. Чтобы просмотреть свойства событий для всей формы или отчета, в верхней части окна свойств выберите в раскрывающемся списке пункт Форма или Отчет.
Откроется редактор Visual Basic с процедурой обработки событий в соответствующем модуле класса. Чтобы просмотреть другие процедуры, которые хранятся в этом модуле класса, прокрутите содержимое вверх или вниз.
Преобразование глобальных макросов
В области навигации щелкните правой кнопкой мыши макрос, который нужно преобразовать, и выберите пункт Конструктор.
На вкладке Конструктор в группе Сервис щелкните Преобразовать макросы.
В диалоговом окне Преобразование макроса установите нужные флажки и нажмите кнопку Преобразовать.
Макрос будет преобразован, и откроется редактор Visual Basic.
Чтобы просмотреть и изменить код VBA, сделайте следующее:
В редакторе Visual Basic, если область Project Explorer (Окно проекта) не отображается, в меню View (Вид) выберите пункт Project Explorer.
Разверните дерево под именем базы данных, в которой вы работаете.
В разделе Модули дважды щелкните модуль Преобразованный макрос — <имя макроса>.
Модуль откроется в редакторе Visual Basic.
Прикрепление функции VBA к свойству события
При преобразовании глобального макроса в VBA код VBA помещается в стандартный модуль. В отличие от модуля класса, стандартный модуль не является частью формы или отчета. Скорее всего, вам будет необходимо связать функцию со свойством события в форме, отчете или окнах, чтобы код запускается точно в нужное время и в нужном месте. Для этого можно скопировать код VBA в модуль класса и связать его со свойством события или сделать специальный звонок из свойства события в стандартный модуль с помощью следующей процедуры:
В редакторе Visual Basic посмотрите, как называется функция. Например, если преобразовать макрос с именем MyMacro, функции будет присвоено имя MyMacro().
Закройте редактор Visual Basic.
В области навигации щелкните правой кнопкой мыши форму или отчет, который нужно связать с функцией, и выберите в контекстном меню пункт Конструктор.
Щелкните элемент управления или раздел, с которым вы хотите связать функцию.
Если окно свойств не отображается, нажмите клавишу F4.
В окне свойств на вкладке События щелкните поле свойства события, с которым нужно связать функцию.
В поле свойства введите знак равенства (=), а затем — имя функции (например, =MyMacro(). Не забудьте ввести скобки.
Сохраните форму или отчет, нажав на панели быстрого доступа кнопку Сохранить.
В области навигации дважды щелкните форму или отчет и проверьте, правильно ли работает код.
Вы ознакомились с основными действиями для добавления кода VBA в базу данных. В этой статье содержатся только общие сведения о том, как приступить к работе, но существует множество справочников и ресурсов в Интернете, с помощью которых вы сможете усовершенствовать свои навыки программирования.
Читайте также: