Событие Form.Open (Access) | Microsoft Docs
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Событие Open происходит при открываемой форме, но до отображения первой записи.
Синтаксис
выражения. Открыть (отменить)
выражение: переменная, представляющая объект Form.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Отмена | Обязательный | 64-разрядное целое число. | Параметр определяет, происходит ли открытие формы или отчета. Настройка аргумента Отмена true (1) отменяет открытие формы или отчета. |
При запуске макроса или процедуры события при открытом событии формы можно закрыть другое окно или переместить фокус на определенный контроль формы. Вы также можете запустить макрос или процедуру события, которая запросит сведения, необходимые перед открытием или печатью формы или отчета.
Например, процедура Open macro или event может открыть настраиваемый диалоговое окно, в котором пользователь вводит критерии фильтрации набора записей для отображения в форме или диапазоне дат, которые необходимо включить для отчета.
Событие Open не происходит при активации уже открытой формы. например, при переходе на форму из другого окна в Microsoft Access или использовании действия OpenForm на макросе, чтобы довести открытую форму до вершины. Однако событие Активировать происходит в этих ситуациях.
Когда вы открываете форму на основе базирующегося запроса, Microsoft Access запускает базовую запрос для формы, прежде чем она запускает процедуру Open macro или event.
Если приложение может одновременно загружать несколько форм, используйте события Активация и Деактивации вместо события Open для отображения и сокрытия настраиваемой панели инструментов при переходе фокуса в другую форму.
Событие Open происходит перед событием
При первом открываемом виде в этом порядке происходят следующие события:
Откройте → загрузку → → активировать → Current
Событие Close происходит после события разгрузки , которое запускается после закрытия формы, но перед ее удалением с экрана.
При закрытии формы в этом порядке происходят следующие события:
Разгрузка → отключения → Close
Когда происходит событие Close , можно открыть другое окно или попросить имя пользователя сделать запись журнала, указывающее, кто использовал форму или отчет.
Если вы пытаетесь решить, использовать ли событие Open или Load для макроса или процедуры событий, одно существенное отличие состоит в том, что событие Open можно отменить, но событие Load не может. Например, если вы динамически строите источник записей для формы в процедуре событий для открытого события формы, можно отменить открытие формы, если нет записей для отображения. Аналогично, событие разгрузки может быть отменено, но событие Закрыть не может.
Пример
В следующем примере показано, как отменить открытие формы при выборе пользователем кнопки «Нет «. Поле сообщений побуждает пользователя вводить сведения о порядке. Если пользователь выбирает «Нет», форма «Сведения о порядке» не открывается.
Чтобы попробовать пример, добавьте в форму следующую процедуру события.
Private Sub Form_Open(Cancel As Integer) Dim intReturn As Integer intReturn = MsgBox("Enter order details now?", vbYesNo) Select Case intReturn Case vbYes ' Open Order Details form. DoCmd.OpenForm "Order Details" Case vbNo MsgBox "Remember to enter order details by 5 P.M." Cancel = True ' Cancel Open event. End Select End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Установка на последнюю запись при открытии формы. Access 2002: Самоучитель
Установка на последнюю запись при открытии формы. Access 2002: СамоучительВикиЧтение
Access 2002: СамоучительДубнов Павел Юрьевич
Содержание
Установка на последнюю запись при открытии формы
В главе 11 уже упоминалось о том, что при активизации форма открывается на последней, еще пустой записи, чтобы пользователь не тратил время на поиски и мог сразу вводить новую информацию. Теперь рассмотрим программный механизм, который позволяет реализовать эту установку. В качестве примера возьмем ту же форму Фирмы.
Подготовка процедуры
По сути данная процедура представляет собой просто фрагмент предыдущей программы. Фокус передается новой записи, затем максимальное значение увеличивается на единицу и присваивается этой новой записи.
Как и в предыдущем примере, начните с окна свойств. Но теперь вам понадобится таблица свойств не какого-то отдельного поля, а всей формы в целом.
Она расположена в левом верхнем углу формы, непосредственно под названием Фирмы: Form (см. рис. 12.13). На фоне окна конструктора откроется окно таблицы свойств формы. Активизируйте опцию Открыть. Щелкните в этом поле мышью и воспользуйтесь стрелкой прокрутки. В выпадающем списке выберите позицию Обработка событий и включите ее в поле Открыть. Если теперь вы щелкнете по кнопке
то в окне модуля будут выведены операторы, обрамляющие процедуру (см. рис. 12.6): Private Sub Form_Open (Cancel As Integer) и End Sub.
Рис. 12.13
Отметим, что само по себе окно модуля не содержит новой информации, необходимой читателю. Поэтому в дальнейшем мы не станем включать в главу рисунки, которые явно избыточны. Обсуждаться будет только текст программы. Однако не забывайте, что она формируется в окне модуля.
Следующий стандартный шаг – установка операторов обработки ошибок. После этого заготовка программы принимает такой вид:Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
. . . . . . . . . . .
Err_Form_Open:
MsgBox Err.Description
Resume Exit_Form_Open
End SubТеперь определите переменную Cod, которая необходима для выполнения процедуры:
Dim Cod As Integer
После этого введите содержательные операторы:
DoCmd.RunMacro «Макрос1»
Cod = DMax(«[Код Фирмы]», «Фирмы») + 1
Forms![Фирмы]![Код фирмы] = [Cod]
DoCmd.RunMacro «Макрос14»
Exit_Form_Open:
Exit SubКоманда Макрос1 задает переход к новой записи, а Макрос14 устанавливает курсор в следующем поле, куда должна вводиться информация. Приведем полный текст процедуры:
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
Dim Cod As Integer
DoCmd.RunMacro «Макрос1»
Cod = DMax(«[Код Фирмы]», «Фирмы») + 1
Forms![Фиpмы]![Koд фирмы] = [Cod]
DoCmd. RunMacro «Макрос14»
Exit_Form_Open:
Exit Sub
Err_Form_Open:
MsgBox Err.Description
Resume Exit_Form_Open
End SubЕсли вы теперь откроете форму Фирмы, то обнаружите, что она сразу открывается на последней записи, которая еще пуста (рис. 12.14). Ее код уже установлен, а курсор находится в поле Название фирмы. Таким образом, форма готова к вводу новой информации. (Не будь написанной и выполненной процедуры, форма открылась бы на первой записи.)
Рис. 12.14Данный текст является ознакомительным фрагментом.
4. Веб-формы 2.0
4. Веб-формы 2.0 Когда в веб-браузерах появился JavaScript, его немедленно стали использовать для двух задач: изменения картинки при наведении мышью и улучшения форм. Когда же в CSS появился псевдокласс :hover, веб-разработчикам перестало быть нужным использовать JavaScript для того,Формы
Формы Иногда данных у нас нет. Совсем! Но мы знаем, как их получить, – о них нужно просто спросить у людей. Они сами с удовольствием дадут нам всю необходимую информацию. Думаю, становится понятно, что речь идет о всевозможного рода опросах и анкетах. Куда поехать на
Создание Web-формы
Создание Web-формы На очереди — Web-форма, в которую посетитель будет вводить искомое слово или его часть. Вот только куда ее поместить? Давайте пока что вставим ее в контейнер cnavbar, ниже полосы навигации, непосредственно перед закрывающим тегом </DIV>, формирующим этот
В последнюю минуту
В последнюю минуту В начале 80-х годов из-за недальновидного руководства развитие вычислительной техники Рочестера стало спотыкаться. Однако у нас все еще было несколько хороших менеджеров, понимавших значение создаваемых систем. Этим людям приходилось поддерживать
1.13. При открытии папки с рисунками, они показываются как картинки. В первый раз тормозит, потом работает быстро. Где это всё кешируется? И как это отключить?
1.13. При открытии папки с рисунками, они показываются как картинки. В первый раз тормозит, потом работает быстро. Где это всё кешируется? И как это отключить? Для отключения этой функции достаточно изменить вид отображения папки в меню View, или через соответствующую ему
Создание Web-формы
Создание Web-формы На очереди — Web-форма, в которую посетитель будет вводить искомое слово или его часть. Вот только куда ее поместить? Давайте пока что вставим ее в контейнер cnavbar, ниже полосы навигации, непосредственно перед закрывающим тегом </DIV>, формирующим этот
Фреймы и формы
Фреймы и формы Рано или поздно вам встретятся страницы, содержащие в себе не только гиперссылки, но и фреймы с формами. ФреймыНередко интернет-страницы разделены (по замыслу разработчиков) на несколько независимых частей, которые называются фреймами[29] . По сути, на
B.3 Регистрационные формы
B.3 Регистрационные формы Регистрационные формы для имен и адресов Интернета можно получить в службе регистрации InterNIC (InterNIC Registration Services), доступной по адресу:http://www.internic.net/при выборе REGISTRATION SERVICES и последующем выборе
Формы
Формы В любую форму, будь то форма заказа или регистрации нового пользователя, необходимо включить самые необходимые поля. При этом нельзя допускать, чтобы пользователь потерял интерес к покупке и не заполнил форму до конца. Вот вам подходящий пример: Чем сложнее форма,
Формы на сайте
Формы на сайте Форма – это то, над чем стоит работать в первую очередь. Основной показатель формы – это конверсия (сколько человек зашло на страницу с формой и сколько выполнило целевое действие и нажало на кнопку для отправки информации).Довольно частая ошибка – это
Создание формы
Создание формы Для создания новой формы VBA выберите Insert=UserForm из меню редактора Visual Basic или из контекстного меню (вызываемого щелчком правой кнопки мыши) в окне проводника проектов. Новая форма (точнее, заготовка новой формы) появится в специально созданном для нее окне, а
Разработка формы
Разработка формы Для того чтобы отправить SMS, необходимо знать номер телефона, на который мы будем отправлять сообщение, оператора этого номера и, естественно, — само отправляемое сообщение.Создайте новый проект Delphi и присвойте форме заголовок SMS-sender (свойство Caption).
Начальная форма при открытии базы данных или приложения
Начальная форма при открытии базы данных или приложения Чтобы база данных открывалась из начальной формы, нужна небольшая настройка. В меню Сервис (строка меню Access) следует активизировать опцию Параметры запуска. В появившемся диалоговом окне (см. рис. 4.28) щелкните по
Удаление записи с установкой на последнюю запись
Удаление записи с установкой на последнюю запись В каждой форме базы данных Контрольно-измерительные приборы созданы две дополнительные кнопки: Изменить запись и Удалить запись (см. рис. 12.15). Рис. 12.15В этом разделе будет рассмотрена процедура, на которой основано
Access vba закрыть форму
Объект Access.Form, работа с формами Access средствами VBA, открытие формы Access, работа с элементами управления на форме Access
Один из важнейших элементов Access, который широко используется в приложениях — это формы. Формы Access предназначены для того же, для чего и обычные формы VBA — это прежде всего контейнеры для графических элементов управления. Но устройство форм Access, их функциональные возможности, приемы работы с ними и даже наборы элементов управления, которые на них можно размещать, сильно отличаются от привычных нам форм VBA, которые можно использовать в Word и Excel.
Формы Access используются:
- Для редактирования записей в таблицах базы данных Access и внешних источников данных. Для того, чтобы создать такие формы, вообще не нужно никакого программирования — достаточно создать форму в режиме конструктора или воспользоваться мастером создания форм. Подключиться к внешнему источнику данных (например, базе данных SQL Server или Oracle) можно, воспользовавшись в Access меню Файл ->Внешние данные ->Связь с таблицами.
- Как панели управления вашего приложения. Очень часто в приложении на основе Access создается начальная форма, которая открывается при запуске этого приложения. На этой формы предусмотрены кнопки и другие элементы управления для вызова других форм, отчетов, макросов, выхода из приложения и выполнения прочих операций. После закрытия других форм управления опять передается начальной форме.
- Просто для предоставления пользователю возможности выполнения любых действий. Например, форму можно использовать для выбора пользователем параметров отчета, выгрузки данных во внешнее приложение (например, Excel) и т.п.
Как работать с формами Access из VBA?
Первое, что необходимо сказать — для работы с формами во многих ситуациях нам придется использовать общий объект AccessObject, который представляет в Access не только формы, но и таблицы, макросы, модули, отчеты и множество других элементов. Поскольку этот объект — универсальный, то, конечно, большой помощи от Intellisense — подсказки в редакторе VBA у нас не будет. Обратиться к объекту формы можно через коллекцию AllForms, которая доступна через объекты CodeProject и CurrentProject. Например, получить информацию о всех формах в базе данных Access можно так:
Dim oA As AccessObject
For Each oA In CurrentProject. AllForms
Если вы будете обращаться к формам в коллекции AllForms по индексу, обратите внимание, что нумерация форм в этой коллекции начинается с 0. Обращаться к элементам в этой коллекции можно и по имени:
Специальное свойство IsLoaded определяет, открыта ли эта форма (то есть загружена ли она в оперативную память).
Программным образом формы можно найти и другим способом. Все открытые формы Access автоматически помещаются в коллекцию Application.Forms и представляются в виде объекта Form. Это — уже нормальный объект, свойства которого соответствуют свойствам формы, доступным через графический интерфейс. Например, если форма Форма1 открыта, получить информацию о ее ширине можно так:
Debug.Print Application.Forms(«Форма 1»).Width
Это свойство можно использовать и для изменения ширины формы, но для этой цели рекомендуется использовать метод DoCmd.MoveSize(), который изменяет размеры активного объекта (например, нашей формы, если она активна):
Еще одна возможность: если вы работаете с кодом самой формы или ее элементов управления (например, события Click кнопки, которая расположена на форме), то обратиться к объекту самой этой формы можно совсем просто. Для этого используется ключевое слово Form.
Как можно открыть форму?
Первое, что нужно сказать — если в Word или Excel нам обязательно потребуется открыть форму программным способом, то в Access это совсем необязательно. Можно открыть форму и вручную из окна базы данных (см. рис. 12.1). Из этого же окна обычно производится создание новых форм или изменение существующих.
Рис. 12.1 Окно для работы с формами в Access
Еще один часто используемый способ — просто запускать форму при открытии базы данных Access. Для этого в меню Сервис нужно выбрать Параметры запуска и выбрать нужную форму в списке Вывод формы/страницы. Если при этом вы уберете все остальные флажки, то приложение при открытии приложение может выглядеть так, как показано на рис. 12.2:
Рис. 12.2 Все лишние возможности Access спрятаны от пользователя
Окно базы данных будет скрыто от пользователя, а это значит, что пользователь не сможет получить информацию ни о таблицах нашей базы данных, ни о других формах, ни о модулях — все служебные элементы базы данных будут от него спрятаны. В принципе, пользователь может обойти такую защиту, держа нажатой при запуске Access кнопку , но программным способом можно закрыть и такую возможность.
Если все-таки нужно открыть форму программным способом (например, из другой формы), то для этой цели можно использовать метод DoCmd.OpenForm(). В самом простом варианте этот метод просто принимает параметр с именем формы:
Если же форма уже открыта, то этот метод, конечно, не открывает форму заново, а просто активизирует ее. Метод DoCmd.OpenForm() принимает также несколько необязательных параметров, при помощи которых вы можете настроить фильтр на отображение записей в форме, режим открытия формы (например, модальность) и т.п. Закрытие формы производится при помощи метода DoCmd.Close(). Если же вам нужно просто спрятать форму, чтобы сохранить введенные на ней пользователем значения и отобразить их при следующем показе, можно просто сделать форму невидимой, назначив ее свойству Visible значение False.
Форма нам обычно нужна не сама по себе, а как контейнер для расположенных на ней элементов управления. Обычно элементы управления программным способом создавать не требуется — намного проще и удобнее поместить их на форму в режиме конструктора для формы. В наборе элементов управления для формы предусмотрены как знакомые нам элементы управления — текстовые поля, надписи, кнопки, флажки и переключатели, так и новые элементы — свободная и присоединенная рамки объектов, разрывы страниц, подчиненные формы/отчеты и т.п. В верхнем правом углу Toolbox в конструкторе формы Microsoft Access находится специальная кнопка Мастера. Если она нажата, то добавление на форму привычных элементов управления (например, кнопки) приведет к появлению окна мастера, который попытается помочь вам автоматически сгенерировать нужный код VBA для этого элемента управления (см. рис. 12.3)
Рис. 12.3 Мастер создания кнопок
Можно использовать генерируемый мастером код как заменитель макрорекордера (которого в Access нет), чтобы понять, как можно выполнить те или иные действия.
Для чего используются нестандартные (по отношению к обычным формам VBA) элементы управления:
- Свободная рамка объекта — возможность разместить на форме OLE-объект (например, документ Word, лист Excel, презентация PowerPoint, рисунок, звукозапись или видеоклип), который может быть встроен в базу данных Access (но не помещен в таблицу!) или находиться во внешнем по отношению к базе данных Access файлу.
- Присоединенная рамка объекта — то же самое, за исключением того, что он применяется для работы с объектами OLE, которые хранятся в таблицах внутри баз данных Access или внешнего источника данных. Это — самый удобный способ генерации отчетов в Word.
Например, предположим, что в нашей базе данных Access находится таблица с тремя столбцами, как показано на рис. 12.4.
Рис. 12.4 Таблица для хранения шаблонов Word
В столбце File у нас хранятся шаблоны Word, которые используются для генерации отчетов. Мы помещаем на форму элемент управления Присоединенная рамка объекта с именем WordTemplate. После этого все, что нужно для создания файла Word на основе шаблона из базы данных, у нас уже есть. Для кнопки, по нажатию на которой будет формироваться отчет, можно использовать следующий код:
‘Получаем ссылку oFrame на объект присоединенной рамки на форме
Dim oFrame As BoundObjectFrame
Set oFrame = oForm.Controls(«WordTemplate»)
‘При помощи метода DLookup () скачиваем в него значение столбца File из таблицы
‘Templates, где номер строки (значение столбца Num ) равно 1
oFrame = Application.DLookup(«[File]», «Templates», «[Num] = 1»)
‘Открываем объект в отдельном окне приложения — то есть создаем
‘документ Word на основе шаблон, загруженного в рамку объекта на форме
‘Активизируем объект приложения
‘Получаем ссылку на Word в переменную oWord
Dim oWord As Word. Application
Set oWord = GetObject(, «Word.Application»)
‘Получаем ссылку на созданный нами документ
Dim oDoc As Word.Document
Set oDoc = oWord.ActiveDocument
‘Дальше работаем средствами Word, например, вставляем нужный текст
‘в места, отмеченные закладками
Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой — чтобы пользователь не мог этот объект активизировать по собственной инициативе.
- Элемент управления Разрыв страницы — определяет начало нового экрана формы.
- Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.
Как уже говорилось, программным способом элементы управления в форме Access приходится создавать редко. Если на форме вам нужен переменный набор элементов управления, то правильнее будет с самого начала создать все нужные элементы управления и по необходимости делать их то видимыми, то невидимыми. Тем не менее создать программным способом элементы управления на форме тоже можно. Эта операция выполняется при помощи метода Application.CreateControl(), который принимает множество параметров — имя формы, на которой создается элемент управления, тип элемента управления, его месторасположение на форме и т.п.
Обращение к значениям элементов управления на форме производится через коллекцию Controls, которая умеет работать с именами элементов управления:
5 Yarden [2014-01-14 16:57:00]
Я пытаюсь создать макрос, который закрывает текущую форму и открывает основную форму.
Так как у меня так много форм, и мне нужна одна и та же кнопка с этим макросом во всех них, я хочу создать макрос только один раз, а не для каждой формы отдельно.
Есть ли способ сделать это?
vba ms-access forms
1 ответ
11 Решение Blackhawk [2014-01-14 17:38:00]
Создайте модуль кода и добавьте следующую функцию:
Теперь, каждый раз, когда у вас есть кнопка, которая должна закрыть текущую форму и открыть форму «frmMain», вы должны написать обработчик события click так:
Me является ссылкой на текущую форму, и каждая форма имеет свойство Name . Поэтому вы можете написать функцию, чтобы закрыть ее без необходимости жесткого кодирования имени в виде строки (кроме, конечно, для основной формы).
Метод Close выполняет действие закрытия в Visual Basic. The Close method carries out the Close action in Visual Basic.
Синтаксис Syntax
выражение.Close (ObjectType, ObjectName, Save) expression.Close (ObjectType, ObjectName, Save)
выражение: переменная, представляющая объект DoCmd. expression A variable that represents a DoCmd object.
Параметры Parameters
Имя Name | Обязательный или необязательный Required/Optional | Тип данных Data type | Описание Description |
---|---|---|---|
ObjectType ObjectType | Необязательный Optional | AcObjectType AcObjectType | Константа AcObjectType, представляющая тип закрываемого объекта. An AcObjectType constant that represents the type of object to close. |
ObjectName ObjectName | Необязательный Optional | Variant Variant | Строковое выражение, которое является допустимым именем объекта типа, выбранного аргументом ObjectType. A string expression that’s the valid name of an object of the type selected by the ObjectType argument. |
Save Save | Необязательный Optional | AcCloseSave AcCloseSave | Константа AcCloseSave, указывающая, нужно ли сохранять изменения в объекте. An AcCloseSave constant that specifies whether to save changes to the object. Значение по умолчанию — acSavePrompt. The default value is acSavePrompt. |
С помощью метода Close можно закрыть указанное окно Microsoft Access или активное окно, если не указано определенное окно. You can use the Close method to close either a specified Microsoft Access window or the active window if none is specified.
Если оставить аргументы ObjectType и ObjectName пустыми (для аргумента ObjectType предполагается константа по умолчанию acDefault), Access закрывает активное окно. If you leave the ObjectType and ObjectName arguments blank (the default constant, acDefault, is assumed for ObjectType), Access closes the active window. Если указать аргумент Save и оставить аргументы_ObjectType_ и ObjectName пустыми, необходимо включить запятые аргументов ObjectType и ObjectName. If you specify the Save argument and leave the ObjectType and ObjectName arguments blank, you must include the ObjectType and ObjectName arguments’ commas.
Если у формы есть элемент управления, привязанный к полю, для свойства Required которого задано значение «Да», а форма закрыта с помощью метода Close без ввода данных для этого поля, сообщение об ошибке не отображается. If a form has a control bound to a field that has its Required property set to Yes, and the form is closed by using the Close method without entering any data for that field, an error message is not displayed. Все изменения, внесенные в запись, будут отменены. Any changes made to the record will be aborted. Когда форма закрывается с помощью пользовательского интерфейса, Access отображает оповещение. When the form is closed by using the user interface, Access displays an alert.
Чтобы отобразить сообщение об ошибке, используйте метод RunCommand для вызова команды acCmdSaveRecord перед вызовом метода Close. To display an error message, use the RunCommand method to invoke the acCmdSaveRecord command before calling the Close method. Это приведет к ошибке во время выполнения, если одно или несколько обязательных полей имеют значение NULL. This will cause a run-time error if one or more required fields are Null. Этот способ показан в следующем примере. This technique is illustrated in the following example.
Пример Example
В следующем примере используется метод Close, чтобы закрыть форму Order Review (Проверка заказа), сохранив все изменения в форме, не выполняя запрос. The following example uses the Close method to close the form Order Review, saving any changes to the form without prompting.
Поддержка и обратная связь Support and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Работа в Microsoft Access XP
|
7.
4 Макрокоманды и объект DoCmdОбъект Access.DoCmd, методы DoCmd, запуск макрокоманд средствами VBA
Объект DoCmd — это «рабочая лошадка» программирования VBA в Access. Этот объект позволяет программным образом выполнять макрокоманды Access — те действия (actions), которые можно просмотреть (на русском языке) в окне конструктора макрокоманд. Действия — это самые распространенные операции, которые обычно приходится выполнять в Access программным способом (они перечислены ниже).
У объекта DoCmd нет свойств — только методы. Для целей унификации в последних версиях Access методы DoCmd «переезжают» в объект Application, но для целей совместимости со старыми приложениями они оставлены и в DoCmd. Microsoft рекомендует по возможности пользоваться одноименными методами объекта Application.
Приводить здесь методы DoCmd с комментариями нет никакого смысла — эти методы в точности соответствуют набору действий в конструкторе макрокоманд (макрокоманд чуть больше за счет того, что для некоторых из них — окно сообщения, запуска внешнего приложения, передачи нажатий клавиш и т. п. предусмотрены отдельные средства VBA).
Подробно описывать макрокоманды мы не будем: для каждого из них предусмотрено описание на русском языке плюс подробная справка на английском по нажатию клавиши <F1>. Писать код вручную для них также нет никакого смысла — всегда есть возможность преобразовать созданный макрос в модуль и просмотреть полученный код. Ниже перечислены лишь основные возможности макрокоманд (объекта DoCmd):
ВывестиВФормате, ПреобразоватьТекст, ПреобразоватьБазуДанных, ПреобразоватьЭлектроннуюТаблицу — макрокоманды, которые обеспечивают экспорт и импорт данных (в формат Excel, RTF, SNP, TXT, DBF, с источниками данных ODBC и т.п.). У каждого из форматов — свои особенности и недостатки. Можно использовать и рассмотренные нами выше средства Word и Excel.
ЗапускЗапросаSQL, ЗапускМакроса, ЗапускПриложения, ЗапускПрограммы — понятно из названия. Под программой понимается процедура или функция VBA, под приложением — внешнее приложение операционной системы.
Открыть…Таблицу, Запрос, Представление, Форму и т.п. — также понятно из названия. Можно выбрать режим открытия (конструктор, просмотр и т.п. и многие другие параметры. После открытия объекта можно воспользоваться его кодом и его элементами управления.
Есть возможность также копировать базу данных и отдельные файлы, искать записи, активизировать элементы управления и выполнять множество других операций.
Объект Access.Form, работа с формами Access средствами VBA, открытие формы Access, работа с элементами управления на форме Access
Один из важнейших элементов Access, который широко используется в приложениях — это формы. Формы Access предназначены для того же, для чего и обычные формы VBA — это прежде всего контейнеры для графических элементов управления. Но устройство форм Access, их функциональные возможности, приемы работы с ними и даже наборы элементов управления, которые на них можно размещать, сильно отличаются от привычных нам форм VBA, которые можно использовать в Word и Excel.
Формы Access используются:
Для редактирования записей в таблицах базы данных Access и внешних источников данных. Для того, чтобы создать такие формы, вообще не нужно никакого программирования — достаточно создать форму в режиме конструктора или воспользоваться мастером создания форм. Подключиться к внешнему источнику данных (например, базе данных SQL Server или Oracle) можно, воспользовавшись в Access меню Файл -> Внешние данные -> Связь с таблицами.
Как панели управления вашего приложения. Очень часто в приложении на основе Access создается начальная форма, которая открывается при запуске этого приложения. На этой формы предусмотрены кнопки и другие элементы управления для вызова других форм, отчетов, макросов, выхода из приложения и выполнения прочих операций. После закрытия других форм управления опять передается начальной форме.
Просто для предоставления пользователю возможности выполнения любых действий. Например, форму можно использовать для выбора пользователем параметров отчета, выгрузки данных во внешнее приложение (например, Excel) и т.п.
Как работать с формами Access из VBA?
Первое, что необходимо сказать — для работы с формами во многих ситуациях нам придется использовать общий объект AccessObject, который представляет в Access не только формы, но и таблицы, макросы, модули, отчеты и множество других элементов. Поскольку этот объект — универсальный, то, конечно, большой помощи от Intellisense — подсказки в редакторе VBA у нас не будет. Обратиться к объекту формы можно через коллекцию AllForms, которая доступна через объекты 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). Из этого же окна обычно производится создание новых форм или изменение существующих.
Рис. 12.1 Окно для работы с формами в Access
Еще один часто используемый способ — просто запускать форму при открытии базы данных Access. Для этого в меню Сервис нужно выбрать Параметры запуска и выбрать нужную форму в списке Вывод формы/страницы. Если при этом вы уберете все остальные флажки, то приложение при открытии приложение может выглядеть так, как показано на рис. 12.2:
Рис. 12.2 Все лишние возможности Access спрятаны от пользователя
Окно базы данных будет скрыто от пользователя, а это значит, что пользователь не сможет получить информацию ни о таблицах нашей базы данных, ни о других формах, ни о модулях — все служебные элементы базы данных будут от него спрятаны. В принципе, пользователь может обойти такую защиту, держа нажатой при запуске Access кнопку <Shift>, но программным способом можно закрыть и такую возможность.
Если все-таки нужно открыть форму программным способом (например, из другой формы), то для этой цели можно использовать метод DoCmd.OpenForm(). В самом простом варианте этот метод просто принимает параметр с именем формы:
DoCmd.OpenForm «Форма1»
Если же форма уже открыта, то этот метод, конечно, не открывает форму заново, а просто активизирует ее. Метод DoCmd.OpenForm() принимает также несколько необязательных параметров, при помощи которых вы можете настроить фильтр на отображение записей в форме, режим открытия формы (например, модальность) и т. п. Закрытие формы производится при помощи метода DoCmd.Close(). Если же вам нужно просто спрятать форму, чтобы сохранить введенные на ней пользователем значения и отобразить их при следующем показе, можно просто сделать форму невидимой, назначив ее свойству Visible значение False.
Форма нам обычно нужна не сама по себе, а как контейнер для расположенных на ней элементов управления. Обычно элементы управления программным способом создавать не требуется — намного проще и удобнее поместить их на форму в режиме конструктора для формы. В наборе элементов управления для формы предусмотрены как знакомые нам элементы управления — текстовые поля, надписи, кнопки, флажки и переключатели, так и новые элементы — свободная и присоединенная рамки объектов, разрывы страниц, подчиненные формы/отчеты и т.п. В верхнем правом углу Toolbox в конструкторе формы Microsoft Access находится специальная кнопка Мастера. Если она нажата, то добавление на форму привычных элементов управления (например, кнопки) приведет к появлению окна мастера, который попытается помочь вам автоматически сгенерировать нужный код VBA для этого элемента управления (см. рис. 12.3)
Рис. 12.3 Мастер создания кнопок
Можно использовать генерируемый мастером код как заменитель макрорекордера (которого в Access нет), чтобы понять, как можно выполнить те или иные действия.
Для чего используются нестандартные (по отношению к обычным формам VBA) элементы управления:
Свободная рамка объекта — возможность разместить на форме OLE-объект (например, документ Word, лист Excel, презентация PowerPoint, рисунок, звукозапись или видеоклип), который может быть встроен в базу данных Access (но не помещен в таблицу!) или находиться во внешнем по отношению к базе данных Access файлу.
Присоединенная рамка объекта — то же самое, за исключением того, что он применяется для работы с объектами OLE, которые хранятся в таблицах внутри баз данных Access или внешнего источника данных. Это — самый удобный способ генерации отчетов в Word.
Например, предположим, что в нашей базе данных Access находится таблица с тремя столбцами, как показано на рис. 12.4.
Рис. 12.4 Таблица для хранения шаблонов Word
В столбце File у нас хранятся шаблоны Word, которые используются для генерации отчетов. Мы помещаем на форму элемент управления Присоединенная рамка объекта с именем WordTemplate. После этого все, что нужно для создания файла 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, например, вставляем нужный текст в места, отмеченные закладками
Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой — чтобы пользователь не мог этот объект активизировать по собственной инициативе.
Элемент управления Разрыв страницы — определяет начало нового экрана формы.
Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.
Как уже говорилось, программным способом элементы управления в форме Access приходится создавать редко. Если на форме вам нужен переменный набор элементов управления, то правильнее будет с самого начала создать все нужные элементы управления и по необходимости делать их то видимыми, то невидимыми. Тем не менее создать программным способом элементы управления на форме тоже можно. Эта операция выполняется при помощи метода Application.CreateControl(), который принимает множество параметров — имя формы, на которой создается элемент управления, тип элемента управления, его месторасположение на форме и т.п.
Обращение к значениям элементов управления на форме производится через коллекцию Controls, которая умеет работать с именами элементов управления:
cSumInNumber = oForm.Controls(«SumNumber»).Value
Иллюстрированный самоучитель по Microsoft Access 2002 › Программирование в Access 2002 › Последовательности событий Access [страница — 469] | Самоучители по офисным пакетам
Последовательности событий Access
Последовательность событий в формах
При открытии формы происходит следующая цепочка событий: Открытие › Загрузка › Изменение размера › Включение › Текущая запись Вход › Получение фокуса.
События Вход (Enter) и Получение фокуса (GetFocus) возникают для первого элемента в первой записи. Если форма не имеет видимых или доступных элементов управления, то последовательность событий несколько иная: Открытие › Загрузка › Изменение размера › Включение › Получение фокуса › Текущая запись.
В этом случае событие Получение фокуса (GetFocus) относится к форме. При закрытии формы последовательность событий следующая: Выход › Потеря фокуса › Выгрузка › Отключение › Закрытие.
То есть сначала теряет фокус последний элемент в форме, а затем выполняются события для формы. Если в форме не было видимых или доступных элементов, то последовательность другая: Выгрузка › Потеря фокуса (ф) › Отключение › Закрытие.
При переключении между двумя открытыми формами последовательность событий следующая: Потеря фокуса (э1) › Отключение (ф1) › Включение (ф2) › Вход (э2) › Получение фокуса (э2).
Если из открытой формы открывают другую форму, то сначала в открываемой форме происходят события Открытие (Open), Загрузка (Load) и Изменение размера (Resize), и только после этого в первой форме произойдет событие Отключение (Deactivate): Открытие (ф2) › Загрузка (ф2) › Изменение размера (ф2) › Отключение (ф1) › Включение (ф2) › Текущая запись (ф2).
Это дает возможность проконтролировать открытие второй формы. Кроме того, событие Включение (Activate) происходит каждый раз, когда форма получает фокус, а события Открытие (Open) и Загрузка (Load) не происходят, если форма уже открыта, даже если переход в эту форму выполняется с помощью макрокоманды ОткрытьФорму (OpenForm). Событие Отключение (Deactivate) для формы не происходит, если фокус переносится в диалоговое окно.
Если открываемая форма содержит подчиненные формы, то сначала загружаются подчиненные формы и осуществляются все события в них, которые обычно происходят при открытии формы, кроме события Включение (Activate) – оно не возникает. Затем загружается главная форма в обычном порядке и для нее выполняется событие Включение (Activate).
Аналогично при закрытии такой формы сначала выгружаются все подчиненные формы, но в них не возникает событие Отключение (Deactivate). События при этом происходят в следующем порядке:
- События для элементов подчиненной формы, например Выход (Exit) и Потеря фокуса (LostFocus).
- События элементов управления в главной форме, в том числе для того элемента, который содержит подчиненную форму.
- События для главной формы.
- События для подчиненной формы.
Последовательность событий клавиатуры и мыши
При нажатии и отпускании любой клавиши на клавиатуре в том случае, если фокус находится в одном из элементов управления формы, возникает следующая цепочка событий: Клавиша вниз › Нажатие клавиши › Клавиша вверх.
При щелчке мышью на элементе управления формы, соответственно: Кнопка вниз › Кнопка вверх › Нажатие кнопки.
Об особенностях этих событий подробно говорилось выше при их описании, поэтому сейчас мы позволим себе не повторяться.
Последовательность событий в отчетах
В отчетах события возникают только для самого отчета и его разделов. Для полей отчета события отсутствуют. При выводе отчета на печать события обычно возникают в следующей последовательности: Открытие › Включение › {Формат › Печать} › Закрытие › Отключение.
События Форматирование (Format) и Печать (Print) относятся к разделам отчета и возникают при обработке каждого раздела. Дополнительными событиями могут быть события:
- Отсутствие данных (NoData), которое возникает перед первым событием Печать (Print), если источник записей не содержит записей.
- Страница (Page), которое возникает после всех событий Печать (Print) для страницы отчета.
- Событие Возврат (Retreat) возникает в процессе форматировании страницы отчета, когда требуется вернуться к предыдущему разделу, перед событиями Печать (Print) для страницы.
Событие Form.Open (Доступ) | Документы Майкрософт
Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 3 минуты на чтение
Событие Open возникает при открытии формы, но до отображения первой записи.
Синтаксис
выражение . Открыть ( Отменить )
выражение Переменная, представляющая объект формы .
Параметры
Имя | Требуется/дополнительно | Тип данных | Описание |
---|---|---|---|
Отмена | Обязательно | Целое число | Параметр определяет, происходит ли открытие формы или отчета. Настройка Отменить аргумент для Истинно (1) отменяет открытие формы или отчета. |
Запустив макрос или процедуру обработки события, когда происходит событие формы Open , вы можете закрыть другое окно или переместить фокус на определенный элемент управления в форме. Вы также можете запустить макрос или процедуру события, которая запрашивает информацию, необходимую перед открытием или печатью формы или отчета.
Например, макрос Открыть или процедура события может открыть настраиваемое диалоговое окно, в котором пользователь вводит критерии фильтрации набора записей для отображения в форме или диапазона дат для включения в отчет.
Событие Open не возникает при активации уже открытой формы; например, когда вы переключаетесь на форму из другого окна в Microsoft Access или используете действие OpenForm в макросе, чтобы вывести открытую форму наверх. Однако в этих ситуациях возникает событие Activate .
При открытии формы на основе базового запроса Microsoft Access выполняет базовый запрос для формы перед выполнением макроса Open или процедуры обработки события.
Если ваше приложение может одновременно загружать более одной формы, используйте события Activate и Deactivate вместо события Open для отображения и скрытия настраиваемых панелей инструментов, когда фокус перемещается на другую форму.
Событие Open происходит перед событием Load , которое запускается при открытии формы и отображении ее записей.
При первом открытии формы происходят следующие события в следующем порядке:
Открыть → Загрузить → Изменить размер → Активировать → Текущий
Событие Close происходит после события Unload , которое запускается после закрытия формы, но до ее удаления с экрана.
При закрытии формы происходят следующие события в следующем порядке:
Выгрузить → Деактивировать → Закрыть
Когда Закрыть событие, вы можете открыть другое окно или запросить имя пользователя, чтобы сделать запись в журнале, указывающую, кто использовал форму или отчет.
Если вы пытаетесь решить, использовать ли событие Открыть или Загрузить для макроса или процедуры обработки события, одно существенное отличие заключается в том, что событие Открыть можно отменить, а событие Загрузить нельзя. . Например, если вы динамически создаете источник записей для формы в процедуре обработки событий для формы Открыть событие , вы можете отменить открытие формы, если нет записей для отображения. Точно так же событие Unload можно отменить, а событие Close нельзя.
Пример
В следующем примере показано, как можно отменить открытие формы, когда пользователь выбирает кнопку Нет . Окно сообщения предлагает пользователю ввести детали заказа. Если пользователь выбирает Нет , форма Сведения о заказе не открывается.
Чтобы попробовать пример, добавьте в форму следующую процедуру обработки события.
Частная подпрограмма Form_Open (отменить как целое число) Dim intReturn As Integer intReturn = MsgBox("Введите детали заказа сейчас?", vbYesNo) Выберите Case intReturn Дело vbДа ' Открыть форму Детали заказа. DoCmd.OpenForm "Детали заказа" Случай vbНет MsgBox "Не забудьте ввести детали заказа до 17:00" Отмена = Истина ' Отменить событие открытия. Конец выбора Конец сабвуфера
Поддержка и отзывы
У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.
Инициирование или открытие формы Windows в Microsoft Access
Содержание
- Введение в Windows Forms
- Открытие формы во время выполнения
- Синтаксис
- Объяснение Syntax Parametters
- Имя
- Просмотр формы
8088
. - Где условие
- Режим данных
- Оконный режим
- Открытые аргументы
- Пример 1
- Пример 2
- Пример 3
Введение в Windows содержит множество элементов управления
3 A 9 form. Эти формы помогают вставлять данные, отображать данные, а также обновлять или удалять данные в базе данных. Короче говоря, они действуют как интерфейс между пользователем и базой данных.
Microsoft Access предоставляет элементы управления формой непосредственно в главном окне, и, к счастью, они не требуют большого количества кода. Это простые в использовании формы по сравнению с другими формами с графическим интерфейсом, предлагаемыми на других языках программирования или в редакторе VBA.
Элементы управления формы, такие как текстовое поле, поле со списком и т. д., могут быть напрямую подключены к полям различных таблиц через окно свойств. Это сэкономит вам много времени и уменьшит кодирование и обслуживание.
Вот изображение развернутой формы с несколькими элементами управления.
Чтобы создать форму, мы можем использовать меню «Создать». Он предлагает различные формы на выбор в зависимости от ваших требований.
Открытие формы во время выполнения
Docmd.Openform — это метод, который можно использовать для загрузки/открытия формы во время выполнения.
Синтаксис
DoCmd.OpenForm (<Имя формы> , [<Вид формы>] ,[ <Имя фильтра> ], [<Где условие>] , [<Режим данных>] , [<Режим окна>], [
Объяснение параметров синтаксиса
Имя формы
Имя формы — ох! Его можно найти в окне «Все объекты доступа» в левой части приложения Access. Некоторые имена форм примера проекта доступны на изображении ниже для справки.
Представление формы
Для этого есть несколько значений, как показано ниже. Этот параметр является необязательным.
- acDesign имеет значение 1 и открывает форму в представлении «Дизайн» — (т.е.) позволяет пользователю редактировать открытую форму.
- acFormDS имеет значение 3 и открывает форму в режиме таблицы.
- acFormPivotChart имеет значение 5 и открывает форму в представлении сводной диаграммы.
- acFormPivotTable имеет значение 4 и открывает форму в представлении сводной таблицы.
- acLayout имеет значение 6 и открывает форму в режиме макета.
- acNormal имеет значение 0 и открывает форму в обычном представлении.
- acPreview имеет значение 2 и открывает форму в режиме предварительного просмотра.
Если этот аргумент не передан, то acNormal становится видом по умолчанию и форма открывается в обычном виде.
Имя фильтра
Строка запроса или «Имя запроса», уже созданное в проекте Access.
Примечание. Здесь не следует использовать какой-либо источник записи.
Ниже вы можете увидеть образец изображения запроса в проекте Access. Несколько запросов были созданы и доступны с левой стороны.
Три представления (представление таблицы, представление конструктора и представление SQL) доступны в меню «Дизайн» для открытия любого запроса. «Представление SQL» запроса открывается для справки.
Where Condition
Предложение where приведенного выше SQL-запроса, но без ключевого слова «where». Это не что иное, как условие, которое автоматически добавляется к предыдущему параметру Имя фильтра.
Режим данных
Режим, в котором форма должна быть открыта в представлении формы или представления таблицы. Это может быть любой из приведенных ниже вариантов. Это необязательный аргумент.
- acFormAdd со значением 0: мы не можем редактировать существующие записи, но можем добавлять новые.
- acFormEdit со значением 1: мы можем добавлять новые записи, а также редактировать существующие.
- acFormPropertySettings со значением -1: нам разрешено изменять свойства формы.
- AcFormReadOnly со значением 2: мы можем только просматривать записи связанной таблицы или базы данных через интерфейс открытой формы.
acFormPropertySettings — это значение по умолчанию , если режим данных не передается в качестве аргумента.
Режим окна
Устанавливает режим окна дисплея. Это необязательный аргумент. Значение может быть любым из следующих значений:
- acDialog со значением 3. Он устанавливает для всплывающих и модальных свойств формы или отчета значение «Да»
- acHidden со значением 1. Скрывает отчет или форму.
- acIcon со значением 2. Это открывает форму или отчет, но оставляет их свернутыми на панели задач Windows.
- AcWindowNormal со значением 0. Это открывает форму или отчет, используя режим, заданный с помощью его свойств. Это значение по умолчанию, если этот аргумент не передается.
Open Args
Это также необязательный аргумент, который можно использовать как в выражениях, так и в макросах. Он открывает форму с определенной записью, значение которой указано в этом аргументе. Когда форма открыта, элемент управления можно перемещать вперед и назад или к любой другой конкретной записи с помощью метода findRecord.
Примеры
Пример 1
Приведенный ниже код открывает форму сотрудника в обычном режиме со всеми параметрами по умолчанию. Однако здесь представлены все параметры по умолчанию, чтобы помочь вам лучше понять пример.
Частная подкоманда583_Click() 'установить значение для whereclause searchCriteria = "[Сведения о сотруднике]. [Назначение] =" & "'Преподаватель'" 'назначить значение запроса переменной для удобства использования strQuery = "Выберите * из [Сведения о сотруднике]" 'Открыть форму с указанными режимами DoCmd.OpenForm "Сведения о сотруднике", acNormal, strQuery, searchCriteria, acFormEdit, acWindowNormal Конец сабвуфера
Вот снимок экрана при нажатии соответствующей командной кнопки.
Пример 2
Этот код имеет разные режимы и другой оператор where. Режим отображения здесь представлен в виде таблицы.
Частная подкоманда583_Click() 'установить значение для whereclause searchCriteria = "[Сведения о сотруднике].[Опыт работы] =" & "'Учитель начальных классов'" 'назначить значение запроса переменной для удобства использования strQuery = "Выберите * из [Сведения о сотруднике]" 'Открыть форму с указанными режимами DoCmd.OpenForm «Сведения о сотруднике», acFormDS, strQuery, searchCriteria, acFormReadOnly, acDialog Конец сабвуфера
Пример 3
В приведенном ниже коде показан макет.
Частная подкоманда583_Click() 'установить значение для whereclause searchCriteria = "[Сведения о сотруднике].[Опыт работы] =" & "'Учитель средней школы'" 'назначить значение запроса переменной для удобства использования strQuery = "Выберите * из [Сведения о сотруднике]" 'Открыть форму с указанными режимами DoCmd.OpenForm "Сведения о сотруднике", acLayout, strQuery, searchCriteria, acFormReadOnly, acWindowNormal Конец сабвуфера
Заключение
По сути, метод Docmd.OpenForm
используется для открытия формы при любом событии — например, при загрузке другой формы или нажатии кнопки. Параметры, которые предлагает метод, помогают нам изменить режим отображения, список отображаемых записей и режим редактирования формы.
Я рекомендую попробовать его со всеми доступными необязательными значениями параметров в любой фиктивной базе данных, чтобы лучше понять эти аргументы.
С тегами: Доступ, Техническое описание, Дизайн, docmd. openform, Формы, SQL, VBA
|
Управление несколькими экземплярами формы
Советы Microsoft Access: управление несколькими экземплярами формыСоветы Microsoft Access для серьезных пользователей
Предоставлено Алленом Брауном.
Хотите сравнить двух или более клиентов на экране одновременно? Хотя эта функция используется редко, она была представлена в Access 97. Новый Ключевое слово создает экземпляр формы с помощью пары строк кода, но управление различными экземплярами требует немного больше усилий. Образец базы данных демонстрирует код в этой статье.
Создание экземпляров
Простой , но неадекватный подход заключается в размещении 9Кнопка команды 0417 на самой форме . Для формы с именем frmClient с командной кнопкой с именем cmdNewInstance вам нужно всего 5 строк кода в модуле форм:
Dim frmMulti As Form Частная подпрограмма cmdNewInstance_Click() Установить frmMulti = Новый Form_frmClient frmMulti.SetFocus Конечный переходник
Откройте форму и нажмите кнопку команды. Вторая клиентская форма открывается поверх первой и может отображать другого клиента. Второй экземпляр также имеет командную кнопку, поэтому вы можете открыть третий экземпляр и так далее.
Однако эти формы не являются независимыми друг от друга . Закройте первую, и все они закроются. Нажмите Новый экземпляр кнопку на втором, а третий и четвертый экземпляры заменены. Поскольку объектная переменная frmMulti объявлена в модуле класса формы, каждый экземпляр может поддерживать только один последующий экземпляр, поэтому закрытие формы или переназначение этой переменной уничтожает все последующие экземпляры, которые могут быть открыты.
У вас также есть трудности с отслеживанием экземпляра . В коллекции Forms будет несколько записей с одинаковым именем, поэтому Forms.frmClient не подходит. Номер индекса коллекции Forms , такой как Forms(3) , также не будет работать: эти номера меняются при открытии и закрытии форм.
Управление экземплярами
Чтобы решить зависимости, создайте коллекцию в другом модуле. Добавляйте в коллекцию при открытии каждого нового экземпляра и удаляйте из коллекции при ее закрытии. Каждый экземпляр теперь полностью независим от других, полагаясь только на вашу коллекцию для выживания.
Чтобы решить проблему идентификации экземпляров, использует свой hWnd уникальный дескриптор, назначаемый операционной системой каждому окну. Это значение должно быть постоянным в течение жизни окна, хотя в файле справки Access 97 содержится предупреждение: Внимание! Поскольку значение этого свойства может меняться во время работы программы, не сохраняйте значение свойства hWnd в общедоступной переменной. Предположительно, этот комментарий относится к повторному использованию этого значения, когда форму можно закрыть и снова открыть. В следующем примере в качестве значения ключа в коллекции используется hWnd экземпляра.
Первая строка ниже создает коллекцию, в которой мы можем хранить независимые экземпляры нашей формы. Функция OpenAClient() открывает экземпляр и добавляет его в нашу коллекцию. Этот код находится в модуле basPublic образца базы данных:
Public clnClient As New Collection «Экземпляры frmClient. Функция OpenAClient() 'Цель: открыть независимый экземпляр формы frmClient. Dim frm As Form 'Откройте новый экземпляр, покажите его и установите заголовок. Установить frm = новый Form_frmClient frm.Visible = Истина frm.Caption = frm.Hwnd & ", открыт " & Now() «Добавь его в нашу коллекцию. clnClient.Добавить элемент:=frm, ключ:=CStr(frm.Hwnd) Установить frm = Ничего Конечная функция Функция ЗакрытьВсеКлиенты() 'Цель: закрыть все экземпляры в коллекции clnClient. 'Примечание: оставляет копию открытой непосредственно из окна/панели навигации базы данных. Dim lngKt As Long Dim lngI до тех пор, пока lngKt = clnClient.Count Для lngI = 1 To lngKt clnClient.Удалить 1 Следующий Завершить функцию
Вторая функция CloseAllClients() демонстрирует, как закрыть эти экземпляры, удалив их из нашей коллекции. Но если пользователь закрывает экземпляр с обычным интерфейсом, нам нужно удалить этот экземпляр из нашей коллекции. Это делается в событии Close формы frmClient следующим образом:
Частная подпрограмма Form_Close() 'Цель: удалить этот экземпляр из коллекции clnClient. Dim obj As Object 'Объект в clnClient Dim blnRemove As Boolean 'Отметьте, чтобы удалить его. 'Проверить, есть ли этот экземпляр в коллекции. Для каждого объекта в clnClient Если obj.Hwnd = Me.Hwnd Тогда blnRemove = Истина Выход для Конец, если Следующий 'Отменить назначение объекта и удалить из коллекции. Установить объект = Ничего Если млрдУдалить Тогда clnClient.Удалить CStr(Me.Hwnd) Конец, если Конец суб
Обратите внимание, что CloseAllClients() демонстрирует, как удаление объекта из коллекции закрывает экземпляр. Если форма открывается непосредственно из окна/панели навигации базы данных, эта копия не закрывается. В производственной среде вы, вероятно, не разрешаете пользователям приближаться к окну базы данных/панели навигации. Чтобы справиться и с этим случаем, замените код циклом на DoCmd. Закрывайте acForm frmClient до тех пор, пока не останется копий. (Не забудьте принудительно сохранить перед закрытием, если оно «грязное»: ошибка в «Закрыть» автоматически отменяет ваши изменения, если есть какая-либо причина, по которой запись не может быть сохранена, например, отсутствие обязательного поля.)
Чтобы увидеть код в действии, загрузите образец базы данных в формате Access 97 (24 КБ, заархивированный) или в формате Access 2000 (19 КБ, заархивированный) в модуле с именем basPublic . Он также содержит форму frmClient с ее процедурой Close, командные кнопки для вызова OpenAClient() и CloseAllClients() , а также форму поиска, которая использует hWnd формы для возврата к вызвавшему ее экземпляру.
Дом | Указатель наконечников | Топ |
MS Access VBA — Открыть другую базу данных
Еще один распространенный запрос время от времени — как запустить другую базу данных из текущей базы данных. Как всегда, есть несколько способов справиться с этим, ниже приведены некоторые из них:
- Метод FollowHyperlink
- Shell
- Автоматизация доступа
Метод FollowHyperlink
FollowHyperlink является родным для Access и может использоваться для открытия любого типа файла в связанной с ним программе по умолчанию. Обратите внимание, что, поскольку это собственная команда, вы не можете использовать ее в другой программе (Word, Excel, …).
'----------------------------------------------------------- ------------------------------------------- ' Процедура: OpenDb3 Автор: Даниэль Пино, CARDA Consultants Inc. Веб-сайт: http://www.cardaconsultants.com ' Цель: открыть другую базу данных ' Авторские права: Нижеследующее является выпуском как Attribution-ShareAlike 4.0 International. ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Требуемые ссылки: не требуется ' ' Входные переменные: ' ~~~~~~~~~~~~~~~~~ ' sDb : Полный путь и имя файла с расширением базы данных до ' открытым ' ' Применение: ' ~~~~~~ 'Вызов OpenDb3("C:\Users\Daniel\Documents\Database25. accdb") ' ' Лист регистраций изменений: ' Дата выпуска (гггг/мм/дд) Описание '*************************************************** **************************************** ' 1 21 января 2018 г. Первоначальный выпуск — демонстрация веб-сайта ' 2 21 августа 2022 г. Добавлен файловый протокол -------------------------------------------------- -------------------------------------- Открытая функция OpenDb3 (sDb как строка) При ошибке Перейти к Error_Handler 'Application.FollowHyperlink sDb Application.FollowHyperlink "file://" & sDb 'Более безопасная версия Ошибка_Handler_Exit: При ошибке Возобновить Далее Выход из функции Error_Handler: MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _ "Номер ошибки: " & Err.Number & vbCrLf & _ "Источник ошибки: OpenDb3" & vbCrLf & _ "Описание ошибки: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _ , vbOKOnly + vbCritical, "Произошла ошибка!" Возобновить Error_Handler_Exit Завершить функцию |
Shell
Shell — одна из тех универсальных команд, которые позволяют делать так много. Опять же, его можно использовать для запуска программ и открытия файлов. Как правило, вам нужно предоставить исполняемый файл, а затем любые переключатели командной строки, которые распознает каждый отдельный исполняемый файл. Однако, поскольку офис зарегистрирован и является частью переменной пути, нам даже не нужно указывать путь к файлу msaccess.exe, а нужно только указать путь/файл базы данных для открытия.
Включение пути/файла исполняемого файла для Access (и других приложений Office) требуется только в том случае, если у вас установлено несколько версий и вы хотите использовать конкретную.
------------------------------------------- ' Процедура: OpenDb2 Автор: Даниэль Пино, CARDA Consultants Inc. Веб-сайт: http://www.cardaconsultants.com ' Цель: открыть другую базу данных ' Авторские права: Нижеследующее является выпуском как Attribution-ShareAlike 4.0 International. ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Требуемые ссылки: не требуется ' ' Входные переменные: ' ~~~~~~~~~~~~~~~~~ ' sDb : Полный путь и имя файла с расширением базы данных до ' открытым ' ' Применение: ' ~~~~~~ 'Вызов OpenDb2("C:\Users\Daniel\Documents\Database25. accdb") ' ' Лист регистраций изменений: ' Дата выпуска (гггг/мм/дд) Описание '*************************************************** **************************************** ' 1 21 января 2018 г. Первоначальный выпуск — демонстрация веб-сайта -------------------------------------------------- -------------------------------------- Открытая функция OpenDb2 (sDb как строка) При ошибке Перейти к Error_Handler Оболочка "cmd/c" и Chr(34) и sDb и Chr(34), vbHide Ошибка_Handler_Exit: При ошибке Возобновить Далее Выход из функции Error_Handler: MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _ "Номер ошибки: " & Err.Number & vbCrLf & _ "Источник ошибки: OpenDb2" & vbCrLf & _ "Описание ошибки: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _ , vbOKOnly + vbCritical, "Произошла ошибка!" Возобновить Error_Handler_Exit Завершить функцию |
Автоматизация доступа
Автоматизация! С годами я по-настоящему оценил силу автоматизации. С автоматизацией вы можете делать все, что хотите, поэтому, очевидно, вы можете открыть базу данных.
------------------------------------------- ' Процедура: OpenDb Автор: Даниэль Пино, CARDA Consultants Inc. Веб-сайт: http://www.cardaconsultants.com ' Цель: открыть другую базу данных ' Авторские права: Нижеследующее является выпуском как Attribution-ShareAlike 4.0 International. ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: используется поздняя привязка, поэтому ничего не требуется. ' ' Входные переменные: ' ~~~~~~~~~~~~~~~~~ ' sDb : Полный путь и имя файла с расширением базы данных до ' открытым ' ' Применение: ' ~~~~~~ 'Вызов OpenDb("C:\Users\Daniel\Documents\Database25.accdb") ' ' Лист регистраций изменений: ' Дата выпуска (гггг/мм/дд) Описание '*************************************************** **************************************** ' 1 07.11.2014 Первоначальный выпуск ' 2 21 января 2018 г. Обновлена обработка ошибок для размещения на веб-сайте -------------------------------------------------- -------------------------------------- Открытая функция OpenDb (sDb как строка) При ошибке Перейти к Error_Handler 'Раннее связывание 'Используйте следующую строку, если она используется в Access или при использовании справочника Access ' обеспечивает intellisense! Dim oAccess как Access. Application 'Поздняя привязка 'Используйте следующую строку, если используется вне Access без ссылки Access ' Dim oAccess как объект Set oAccess = CreateObject("Access.Application") 'Создать новый экземпляр Access С оаксесс .OpenCurrentDatabase sDb 'Открыть указанную базу данных .Visible = True 'Убедитесь, что он виден конечному пользователю .UserControl = Истина ' .DoCmd.OpenForm "YourFormName" 'Открыть форму? ' .DoCmd.RunMacro "YourMacroName" 'Запустить макрос? Конец с Ошибка_Handler_Exit: При ошибке Возобновить Далее Если не oAccess равно ничего, тогда установите oAccess = ничего Выход из функции Error_Handler: MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _ "Номер ошибки: " & Err.Number & vbCrLf & _ "Источник ошибки: OpenDb" & vbCrLf & _ "Описание ошибки: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _ , vbOKOnly + vbCritical, "Произошла ошибка!" Возобновить Error_Handler_Exit Завершить функцию |
Метод OpenCurrentDatabase также позволяет передавать пароль в качестве третьего входного аргумента, если база данных защищена.
Среда выполнения
Этот подход не работает со средой выполнения, поскольку среда выполнения не может выполнить CreateObject для создания нового экземпляра Access.
Какой использовать?
Простой обычно лучше, поэтому Shell и FollowHyperlink настолько просты, насколько это возможно НО подход к автоматизации предлагает вам возможность взаимодействовать с базой данных после ее запуска. Таким образом, он позволяет вам с легкостью открывать формы, отчеты, запускать макросы, код VBA и тому подобное. Итак, какой из них следует использовать, зависит от того, что вам нужно выполнить (как всегда)!
VBA, чтобы узнать, открыта ли форма, и закрыть ее
JavaScript отключен. Для лучшего опыта, пожалуйста, включите JavaScript в вашем браузере, прежде чем продолжить.
- Автор темы Эль Зорро
- Дата начала
Эль Зорро
- #1
У меня есть 2 формы, форма A и форма B. У меня есть кнопка управления на форме B. Когда
пользователь щелкает этот элемент управления, я хочу выполнить код VBA, который закроет форму
A, если она открыта. Но я не могу получить правильную кодировку. Я пробовал
варианта этого…
If FormA.Open = True Then Close it AND [выполните инструкции здесь]
ELse [выполните инструкции здесь]
End If
Должна быть простая команда или функциональный тест, если форма А открыта. Я пробовал
«If IsLoaded (Forms! Form A)…», но не играл в кости. И, конечно же, мне не нужно
сообщение об ошибке, если форма А не открыта и программа не может ее найти.
Кроме того, какой код следует использовать для закрытия формы A из формы B? (Обычно я использую
DoCmd.Close, но именно тогда я закрываю форму.
Спасибо!
Объявления
- #2
У меня есть 2 формы, форма A и форма B. У меня есть кнопка управления в форме B. Когда
пользователь щелкает этот элемент управления, я хочу выполнить код VBA, который закроет форму 9.0433 А, если он открыт. Но я не могу получить правильную кодировку. Я пробовал
варианта этого…If FormA.Open = True Then Close it AND [выполните инструкции здесь]
ELse [выполните инструкции здесь]
End IfДолжна быть простая команда или функциональный тест, если форма А открыта. Я пробовал
«If IsLoaded (Forms! Form A)…», но не играл в кости. И, конечно же, мне не нужно
сообщение об ошибке, если форма А не открыта и программа не может ее найти.Кроме того, какой код следует использовать для закрытия формы A из формы B? (я обычно использую
DoCmd.Close, но именно тогда я нахожусь в форме, которую закрываю.Спасибо!
Нажмите, чтобы развернуть…
Не имеет значения, если форма не открыта, когда вы ее закрываете.
Просто закройте его. Ничего плохого не произойдет. Ни ошибки, ничего.
Если необходимо определить, открыта ли форма, можно использовать функцию
IsLoaded, чтобы определить, открыта ли форма.
В Access 2000 или новее:
Если не CurrentProject.AllForms(«FormA»).IsLoaded Then
Сделайте что-нибудь здесь
Иначе
Сделайте что-нибудь еще
End If
*************
В Access 97 скопируйте эту функцию (из базы данных Northwind. mdb sample
) в модуль :
Функция IsLoaded(ByVal strFormName As String) As Integer
‘ Возвращает значение True, если указанная форма открыта в режиме формы или
в режиме таблицы.
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <>
conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
Затем закодируйте событие:
If Not IsLoaded(«FormA») Then
Else
Сделайте это
Конец, если
Объявления
Грэм Мандено
- #3
Чтобы проверить, загружена ли форма A, используйте:
If CurrentProject. AllForms(«FormA»).IsLoaded Then
Чтобы закрыть форму A, используйте:
DoCmd.Close acForm, «FormA»
На самом деле, я никогда не используйте DoCmd.Close сам по себе, потому что он иногда закрывает неправильный объект
из-за проблем с синхронизацией. Чтобы закрыть текущую форму, используйте:
DoCmd.Close acForm, Me.Name
Хотите ответить в этой теме или задать свой вопрос?
Вам нужно будет выбрать имя пользователя для сайта, что займет всего пару минут. После этого вы можете опубликовать свой вопрос, и наши участники помогут вам.
Закрыть всплывающую форму из непрерывной подчиненной формы | 3 | |
Isloaded для всех открытых форм? | 7 | |
Если IsLoaded для обнаружения из нескольких форм | 4 | |
Необходимо обновить поле со списком при переходе к новой записи 2017 | 1 | |
попытка закрыть форму | 1 | |
Передача данных из одной формы в другую | 1 |