Метод DoCmd.OpenModule (Access) | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Метод OpenModule выполняет действие OpenModule в Visual Basic.
Синтаксис
выражения. OpenModule (ModuleName, ProcedureName)
выражение: переменная, представляющая объект DoCmd.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
ModuleName | Необязательный | Variant | Выражение строки, которое является допустимым именем Visual Basic, который необходимо открыть. Если оставить этот аргумент пустым, Microsoft Access ищет все стандартные модули в базе данных для процедуры, выбранной с аргументом ProcedureName , и открывает модуль, содержащий процедуру для этой процедуры. При выполнении Visual Basic, содержащего метод OpenModule в базе данных библиотеки, Access сначала ищет модуль с этим именем в базе данных библиотеки, а затем в текущей базе данных. |
ProcedureName | Необязательный | Variant | Выражение строки, которое является допустимым именем процедуры, для которого необходимо открыть модуль. Если оставить этот аргумент пустым, модуль откроется в разделе Объявления. |
Используйте метод OpenModule для открытия указанного Visual Basic в указанной процедуре. Это может быть процедура Sub, процедура Function или процедура события.
Необходимо включить по крайней мере один из двух аргументов действий OpenModule. Если вы вводите значение для обоих аргументов, Access открывает указанный модуль в указанной процедуре.
Пример
В следующем примере модуль «Полезные функции» открывается процедуре IsLoaded () Function .
DoCmd.OpenModule "Utility Functions", "IsLoaded"
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
12.4. Макрокоманды и объект DoCmd
294 | Глава 12 |
Объект DoCmd — это «рабочая лошадка» программирования в Access. Этот объект позволяет программным образом выполнять макрокоманды Access — те действия (actions), которые можно просмотреть (на русском языке) в окне конструктора макрокоманд. Действия — это самые распространенные операции, которые обычно приходится выполнять в Access программным способом.
У объекта DoCmd нет свойств, только методы. Для целей унификации в последних версиях Access методы DoCmd «переезжают» в объект Application, но для совместимости со старыми приложениями они оставлены и в DoCmd. Microsoft рекомендует по возможности пользоваться одноименными метода-
ми объекта Application.
Приводить здесь методы DoCmd с комментариями нет никакого смысла — эти методы в точности соответствуют набору действий в конструкторе макрокоманд (макрокоманд чуть больше за счет того, что для некоторых из них — окно сообщений, запуск внешнего приложения, передача нажатий клавиш и т. п. — предусмотрены отдельные средства VBA).
Подробно описывать макрокоманды мы не будем: для каждой из них предусмотрено описание на русском языке и подробная справка на английском по нажатию клавиши <F1>. Просмотреть такое описание можно из окна создания макросов (для этого в окне базы данных нужно перейти на вкладку Макросы и нажать кнопку Создать. Писать код вручную для них также нет никакого смысла — всегда есть возможность преобразовать созданный макрос в модуль и просмотреть полученный код. Далее перечислены лишь основные возможности макрокоманд (методов объекта DoCmd).
OutputTo() (соответствует макрокоманде ВывестиВФормате), TransferText()
(ПреобразоватьТекст), TransferDatabase() (ПреобразоватьБазуДанных), Trans-
ferSpreadsheet() (ПреобразоватьЭлектроннуюТаблицу) — макрокоманды, ко-
торые обеспечивают экспорт и импорт данных (в формат Excel, RTF, SNP, TXT, DBF, с источниками данных ODBC и т. п.). У каждого из форматов есть свои особенности и недостатки. Можно использовать и рассмотренные нами ранее средства Word и Excel.
RunSQL() (ЗапускЗапросаSQL), RunMacro() (ЗапускМакроса) — позволяют вы-
полнить запрос на языке SQL или макрос соответственно.
Методы с префиксом Open…() (макрокоманды с префиксом Открыть… —
Таблицу, Запрос, Представление, Форму и т. п.) — их действия также понятны из названий. Можно выбрать режим открытия (конструктор, просмотр и т. п.) и многие другие параметры. После открытия объекта можно воспользоваться его кодом и его элементами управления.
Программирование в Access | 295 |
Есть возможность также копировать базу данных и отдельные файлы, искать записи, активизировать элементы управления и выполнять множество других операций.
Один из важнейших элементов Access, который широко используется в приложениях, — это формы. Формы Access предназначены для того же, для чего и обычные формы VBA — это прежде всего контейнеры для графических элементов управления. Но устройство форм Access, их функциональные возможности, приемы работы с ними и даже наборы элементов управления, которые на них можно размещать, сильно отличаются от привычных нам форм VBA, которые можно использовать в Word и Excel.
Формы Access используются:
1.Для редактирования записей в таблицах базы данных Access и внешних источников данных. Для того чтобы создать такие формы, вообще не нужно никакого программирования — достаточно создать форму в режиме конструктора или воспользоваться мастером создания форм. Подключиться к внешнему источнику данных (например, к базе данных SQL Server или Oracle) можно, воспользовавшись в Access меню Файл | Внешние данные | Связь с таблицами.
2.Как панели управления вашего приложения. Очень часто в приложении на основе Access создается начальная форма, которая открывается при запуске этого приложения. На этой формы предусмотрены кнопки и другие элементы управления для вызова других форм, отчетов, макросов, выхода из приложения и выполнения прочих операций. После закрытия других форм управление опять передается начальной форме.
3.Просто для предоставления пользователю возможностей для выполнения любых действий. Например, форму можно использовать для выбора пользователем параметров отчета, выгрузки данных во внешнее приложение (например, Excel) и т. п.
Как работать с формами Access из VBA?
Первое, что необходимо сказать — для работы с формами во многих ситуациях нам придется использовать общий объект AccessObject, который представляет в Access не только формы, но и таблицы, макросы, модули, отчеты и множество других элементов. Поскольку этот объект универсальный, то, конечно, большой помощи от подсказки в редакторе VBA у нас не будет. Обратиться к объекту формы можно через коллекцию AllForms, которая доступна
296 | Глава 12 |
через объекты CodeProject и CurrentProject. Например, получить информацию о всех формах в базе данных Access можно так:
Dim oA As AccessObject
For Each oA In CurrentProject.AllForms
Debug.Print oA.Name
Next
Если вы будете обращаться к формам в коллекции AllForms по индексу, обратите внимание, что нумерация форм в этой коллекции начинается с 0. Обращаться к элементам в этой коллекции можно и по имени:
Debug. Print CurrentProject.AllForms(«Форма1»).IsLoaded
Специальное свойство IsLoaded определяет, открыта ли эта форма (т. е. загружена ли она в оперативную память).
Программно формы можно найти и другим способом. Все открытые формы Access автоматически помещаются в коллекцию Application.Forms и представляются в виде объекта Form. Это уже нормальный объект, свойства которого соответствуют свойствам формы, доступным через графический интерфейс. Например, если форма Форма1 открыта, получить информацию о ее ширине можно так:
Debug.Print Application.Forms(«Форма1»).Width
Это свойство можно использовать и для изменения ширины формы, но для этой цели рекомендуется использовать метод DoCmd.MoveSize(), который изменяет размеры активного объекта (например, нашей формы, если она активна):
DoCmd.MoveSize Width:=10000
Еще одна возможность: если вы работаете с кодом самой формы или ее элементов управления (например, внутри события Click кнопки, которая расположена на форме), то обратиться к объекту самой этой формы можно просто, используя ключевое слово Form.
Как открыть форму?
Если в Word или Excel нам обязательно нужно открывать форму программным способом, то в Access это делать совсем необязательно. Можно открыть форму и вручную из окна базы данных (рис. 12.1). Из этого же окна обычно производится создание новых форм или изменение уже существующих.
Еще один часто используемый способ — это просто запустить форму при открытии базы данных Access. Для этого в меню Сервис нужно выбрать пункт Параметры запуска и выбрать нужную форму в списке Вывод формы/страницы. Если при этом вы уберете все остальные флажки, то приложение при открытии может выглядеть так, как показано на рис. 12.2.
Программирование в Access | 297 | |
|
|
|
|
|
|
Рис. 12.1. Окно базы данных
Рис. 12.2. При открытии Access пользователь видит только одну форму
298 | Глава 12 |
Окно базы данных будет скрыто от пользователя, а это значит, что пользователь не сможет получить информацию ни о таблицах нашей базы данных, ни о других формах, ни о модулях — все служебные элементы базы данных будут от него спрятаны. В принципе, пользователь может обойти такую защиту, держа нажатой при запуске Access клавишу <Shift>, но программным способом можно закрыть и такую возможность.
Если все-таки нужно открыть форму программно (например, из другой формы), то для этой цели можно использовать метод DoCmd.OpenForm(). В самом простом варианте этот метод просто принимает параметр с именем формы:
DoCmd.OpenForm «Форма1»
Если форма уже открыта, то этот метод не открывает ее заново, а просто активизирует. Метод DoCmd.OpenForm() принимает также несколько необязательных параметров, при помощи которых вы можете настроить фильтр на отображение записей в форме, режим открытия формы (например, модальность) и т. п. Закрытие формы производится при помощи метода DoCmd.Close(). Если же вам нужно просто спрятать форму, чтобы сохранить введенные на ней пользователем значения и отобразить их при следующем показе, можно просто сделать форму невидимой, назначив ее свойству
Visible значение False.
Форма нам обычно нужна как контейнер для расположенных на ней элементов управления. Обычно элементы управления программным способом создавать не нужно, намного проще и удобнее поместить их на форму в режиме конструктора. В наборе элементов управления для формы предусмотрены как знакомые нам элементы управления (текстовые поля, надписи, кнопки, флажки и переключатели), так и новые (свободная и присоединенная рамки объектов, разрывы страниц, подчиненные формы/отчеты и т. п.). В верхнем правом углу Панели инструментов в конструкторе формы Microsoft Access находится специальная кнопка Мастера. Если она нажата, то добавление на форму привычных элементов управления (например, кнопки) приведет к появлению окна мастера, который попытается помочь вам автоматически сгенерировать нужный код VBA для этого элемента управления (рис. 12.3).
Можно использовать генерируемый мастером код как заменитель макрорекордера (которого в Access нет), чтобы понять, как можно выполнить те или иные действия.
В Access добавлены нестандартные (по отношению к обычным формам VBA) элементы управления.
Свободная рамка объекта — предоставляет возможность разместить на форме OLE-объект (например, документ Word, лист Excel, презентацию PowerPoint, рисунок, звукозапись или видеоклип), который может быть
Программирование в Access | 299 |
встроен в базу данных Access (но не помещен в таблицу) или находиться во внешнем по отношению к базе данных Access файлу.
Рис. 12.3. Мастер создания кнопок
Присоединенная рамка объекта — то же самое, за исключением того,
что этот элемент применяется для работы с объектами OLE, которые хранятся в таблицах внутри баз данных Access или внешнего источника данных. Это самый удобный способ генерации отчетов в Word.
Предположим, что в нашей базе данных Access находится таблица с тремя столбцами, как показано на рис. 12.4.
В столбце File у нас хранятся шаблоны Word, которые используются для генерации отчетов. Мы помещаем на форму элемент управления Присоединенная рамка объекта с именем WordTemplate. После этого все, что нужно для создания файла Word на основе шаблона из базы данных, у нас уже есть.
300 |
| Глава 12 |
|
|
|
|
|
|
Рис. 12.4. Таблица для хранения шаблонов Word
Для кнопки, по нажатию на которой будет формироваться отчет, можно использовать следующий код:
‘Получаем ссылку oFrame на объект присоединенной рамки на форме
Dim oFrame As BoundObjectFrame
Set oFrame = oForm.Controls(«WordTemplate»)
‘При помощи метода DLookup() скачиваем в него значение столбца File ‘из таблицы Templates, где номер строки (значение столбца Num) = 1 oFrame = Application.DLookup(«[File]», «Templates», «[Num] = 1»)
‘Открываем объект в отдельном окне приложения, т. е. создаем ‘документ Word на основе шаблона, загруженного в рамку объекта на форме oFrame. Verb = acOLEVerbOpen
‘Активизируем объект приложения oFrame.Action = acOLEActivate
‘Получаем ссылку на Word в переменную oWord Dim oWord As Word.Application
Set oWord = GetObject(, «Word.Application»)
‘Получаем ссылку на созданный нами документ
Dim oDoc As Word.Document
Set oDoc = oWord.ActiveDocument
‘Дальше работаем средствами Word, например, вставляем нужный текст ‘в места, отмеченные закладками
Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой, чтобы пользователь не мог активизировать этот объект по собственной инициативе.
Разрыв страницы — этот элемент управления определяет начало нового экрана формы.
Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.
RunCommand вместо DoCmd.Objec
Следующая информация взята из статьи Роберта Флейка из Microsoft Corporation под названием «Макросы: советы и рекомендации». Первоначальная ссылка больше не работает, поэтому я ее удалил.
Должен ли я использовать метод RunCommand или методы объекта DoCmd?
Методы объекта DoCmd используются в Visual Basic для выполнения Макродействия Microsoft Access. Например, для выполнения OpenForm действия в процедуре Visual Basic используется следующий синтаксис
DoCmd.OpenForm arguments
, где arguments – это параметры аргумента действия, которые вы хотите использовать для действия OpenForm.
Метод RunCommand используется для выполнения меню Microsoft Access или команда панели инструментов. Метод RunCommand заменяет метод DoMenuItem. использовался в предыдущих версиях Microsoft Access. Для запуска определенного меню или команда панели инструментов в Visual Basic, используйте следующий синтаксис
[Приложение].RunCommand команда
или
[DoCmd].RunCommand команда
, где команда — это внутренняя константа, соответствующая команда меню или панели инструментов. Префикс Application или DoCmd является необязательным. Чтобы просмотреть список встроенных констант метода RunCommand, выполните поиск Указатель справки Microsoft Access для «метода RunCommand» и выберите Тема «Константы метода RunCommand».
Хотя в некоторых случаях макрокоманда и команда меню действуют одинаково вещи (например, действие «Найти» и команда «Найти» на панели «Правка»). меню), методы объекта DoCmd и метод RunCommand различаются и должны использоваться по-разному. (Метод RunCommand является метод объекта DoCmd, но он имеет специальное назначение: выполнять Майкрософт Доступ к командам меню.) Наиболее важным отличием является то, что вы, вы используете методы DoCmd, вы можете указать аргумент действия настройки. Когда вы используете метод RunCommand, он просто выполняет указанная команда. Если команда вызывает диалоговое окно, диалоговое появляется коробка. Использование методов DoCmd позволяет выполнять действия в Microsoft Access без использования команд меню и их диалогов коробки.
Например, вам может понадобиться функциональная процедура, которая выбирает текущую запись в форме и печатает ее.
Функция PrintRecord()
'Эта процедура выбирает текущую запись и печатает ее.
RunCommand аккмдселектрекорд
DoCmd.PrintOut acSelection
End Function
Эта функция использует метод RunCommand и встроенную константу acCmdSelectRecord для выполнения команды «Выбрать запись» в окне «Правка». меню, которое выбирает текущую запись. Затем метод PrintOut Объект DoCmd с аргументом printrange, установленным в acSelection, печатает выбранную запись. Обратите внимание, что если вместо использования метода PrintOut аргумента DoCmd, вы используете метод RunCommand для выполнения Команда «Печать» в меню «Файл», функция выбирает текущую запись, но вызывает диалоговое окно «Печать»:
Функция PrintRecord()
'Эта процедура выбирает текущую запись, но не
'автоматически распечатать его.
RunCommand аккмдселектрекорд
RunCommand аккмдпринт
End Function
Если вы используете оператор SendKeys для отправки клавиши ENTER, чтобы выбрать OK в диалоговое окно, печатается весь набор записей, а не только выбранные записывать. Вы можете использовать серию операторов SendKeys для перехода к соответствующее поле в диалоговом окне и выберите выбранные записи вариант, но метод PrintOut объекта DoCmd выполняет это намного эффективнее.
Объект DoCmd — Access 2003 VBA Programmer’s Reference [Book]
E.13. Объект DoCmd
Как следует из названия, этот объект позволяет выполнять действия в Microsoft Access. У объекта DoCmd нет свойств, но есть множество методов, которые вы можете использовать в своем приложении Access.
Е.13.1. Методы объекта DoCmd
Методы объекта DoCmd перечислены в следующей таблице. Все методы здесь фактически выполняют действие с тем же именем, что и метод. Мы включили описание действия, а не описание метода (который просто вызывает действие).
Method | Arguments | Description |
---|---|---|
AddMenu | MenuName, MacroName, StatusBarText | Creates a custom menu bar, shortcut bar, or shortcut menu |
ApplyFilter | FilterName, WhereCondition | Используется для применения фильтра, запроса или предложения SQL WHERE к таблице, форме или отчету |
Сигнал | Нет | Вызывает звуковой сигнал системы0087 |
CancelEvent | Нет | Используется для отмены события, вызвавшего запуск макроса или модуля, содержащего это действие |
CopyDatabaseFile | DatabaseFileName, OverwriteExistingFile, DisconnectAllUsers | Копирует базу данных, подключенную к текущему проекту, в базу данных SQL Server для экспорта |
CopyObject | DestinationDatabase, NewName, SourceObjectType, SourceObjectName | Copies the specified object to another database (mdb) or Access project (adp) |
DeleteObject | ObjecType, ObjectName | Deletes the specified object |
DoMenuItem | MenuBar, MenuName, Command, SubCommand, Version | Выполняет указанный пункт меню (Примечание. |