Light-electric.com

IT Журнал
78 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba закрыть access

12.5 Работа с формами Access из VBA (объект Form )

Объект 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(), который изменяет размеры активного объекта (например, нашей формы, если она активна):

DoCmd.MoveSize Width :=10000

Еще одна возможность: если вы работаете с кодом самой формы или ее элементов управления (например, события 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, например, вставляем нужный текст

‘в места, отмеченные закладками

Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой — чтобы пользователь не мог этот объект активизировать по собственной инициативе.

  • Элемент управления Разрыв страницы — определяет начало нового экрана формы.
  • Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.
Читать еще:  Routing and remote access настройка

Как уже говорилось, программным способом элементы управления в форме Access приходится создавать редко. Если на форме вам нужен переменный набор элементов управления, то правильнее будет с самого начала создать все нужные элементы управления и по необходимости делать их то видимыми, то невидимыми. Тем не менее создать программным способом элементы управления на форме тоже можно. Эта операция выполняется при помощи метода Application.CreateControl(), который принимает множество параметров — имя формы, на которой создается элемент управления, тип элемента управления, его месторасположение на форме и т.п.

Обращение к значениям элементов управления на форме производится через коллекцию Controls, которая умеет работать с именами элементов управления:

Как защитить проект VBA паролем

Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем «гуляют по рукам». Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита «от дурака»: чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина — код является «коммерческим» и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не «сломали».
По сути защитить проект VBA стандартными средствами совсем не сложно. Переходим в проект VBA (Alt+F11), далее:

  1. ToolsVBAProject Properties -вкладка Protection;
  2. устанавливаем галочку «Lock project for viewing«. Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля;
  3. вписываем пароль в полях Password и Confirm password.

Чтобы снять пароль с проекта VBA необходимо перейти в проект VBA (Alt+F11) и:

  1. ToolsVBAProject Properties -вкладка Protection;
  2. снимаем галочку «Lock project for viewing«;
  3. удаляем пароль в полях Password и Confirm password

Хочу так же отметить, что пароль от проекта VBA ломается на ура(программ для этого достаточно в сети, перечислять не буду — кому надо сможет найти, а кто не сможет — значит не так уж и надо). Корпорацией Microsoft данный пароль точно не разрабатывался для защиты проекта от несанкционированного взлома и скорее был направлен больше на защиту от дурака. А может дело в том, что сам VBE практически не дорабатывался чуть ли не с самого его создания.
В любом случае, для тех, кто хочет чуть надежнее защитить свой проект VBA лучше использовать для этого сторонние утилиты. Например, очень хорошая программа для рядовых пользователей Protect VBA от eliansoft (http://www.eliansoft.com). Данная программа делает недоступным проект VBA. Никаких паролей вводить не надо — проект просто недоступен даже для ввода пароля. Последняя бесплатная версия была 1.6. Сейчас в сети её уже практически не найти в бесплатном варианте, т.к. разработчики убрали её с офф.сайта и постарались убрать отовсюду, видимо. Но т.к. у меня эта программа есть — выкладываю здесь, но скачать можно только после регистрации на сайте (чтобы тот же eliansoft не смог добраться).
Скачать Protect VBA

Protect_VBA.zip (287,1 KiB, 360 скачиваний)
У Вас нет прав для скачивания этого файла. Возможно, Вы не зарегистрированы на сайте. Зарегистрируйтесь и попробуйте скачать снова.

  • создаете файл с кодом, сохраняете, закрываете
  • запускаете Protect VBA
  • выбираете файл, проект VBA которого надо защитить
  • нажимаете Protect
  • будет предложено выбрать папку для сохранения защищенного файла. Здесь лучше заранее создать папку для сохранения файла, т.к. программа делает копию оригинального файла и не даст сохранить непосредственно тот же файл. Что к лучшему — ведь должен же у нас остаться файл с открытыми кодами 🙂

Статья помогла? Поделись ссылкой с друзьями!

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 кнопку , но программным способом можно закрыть и такую возможность.

Читать еще:  Findfirst vba 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.

Отладка приложений Access

Access. Программирование на VBA. Часть 2.

По материалам книги Стивена Форта, Тома Хоуна и Джеймса Релстона

«Microsoft Access 2000 Development»

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

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

Исключение логических ошибок

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

Логические ошибки могут происходить по следующим причинам:

• Процедура пытается использовать поле базы данных, не содержащее значений (нулевое значение)

• Неправильные математические расчеты

• Обработка операции в коде в неверном порядке

Работа в среде разработки Visual Basic (IDE)

Среда разработки в Access 2000 претерпела радикальные изменения. В настоящее время в Access вклю­чена Integrated Development Environment (IDE) (интегрированная среда разработки) Visual Basic, имею­щиеся также в Visual Basic 5/6, Word 97 и других программных продуктах Office 97/2000. Эта среда редактирования включает стандартные средства разработки приложений для различных программных продуктов. Методики отладки, описанные в данной статье, с одинаковым успехом могут использоваться как в разработках Access, так и в разработках Visual Basic и Microsoft Office. Чтобы открыть IDE, нахо­дясь в режиме конструктора, необходимо в меню выбрать команду View | Code (Вид | Код). Среда IDE включает различные окна, которые можно открывать и закрывать, например, окно Project (Проект), окно Properties (Свойства), окно Immediate (Отладка) и др. Чтобы открыть окно в IDE, необходимо выбрать данное окно в меню View. Закрыть окно можно, щелкнув на кнопке закрытия окна в верхнем правом углу окна. При следующем запуске IDE все окна будут отображены в том же состоянии, в котором они на­ходились в момент выхода из среды IDE. Когда в окне Design (Конструктор) открыта форма, можно работать с элементами управления и свойствами, как и в предыдущих версиях Access. Однако для про­смотра кода формы необходимо открыть IDE Visual Basic (рис. 1). На самом деле это совершенно от­дельное от Access приложение.

Читать еще:  Union в access

РИСУНОК 1.Интегрированная среда разработки (IDE) Visual Basic.

Хотя IDE Visual Basic является отдельным приложением, оно работает вместе с Access. Если IDE Visual Basic открыта, при выходе из Access она закрывается. Чтобы закрыть IDE Visual Basic, необходимо в меню выбрать пункты File | Close | Return to Microsoft Access (Файл | Закрыть | Вернуться в Microsoft Access).

Рассмотрим окна IDE Visual Basic.

Project Explorer (Проводник проектов) отображает список форм, отчетов и модулей класса в данном приложении Access (рис. 2). Для просмотра кода необходимо щелкнуть правой кнопкой мыши на ка­ком-либо из этих объектов или перейти в режим конструктора формы. Чтобы открыть Project Explorer, необходимо в меню выбрать команду View | Project Explorer (Вид | Проводник проектов) или использо­вать комбинацию клавиш Ctrl+R.

РИСУНОК 2.Окно Project Explorer.

Окно Code (Код) отображает код для форм, модулей и модулей класса (рис. 3). Разработчики обычно проводят много часов, вводя и модифицируя код в окне Code. Чтобы открыть окно Code, необходимо в меню выбрать команду View | Code (Вид | Код) или нажать клавишу F7. В верхней части окна Code име­ется два раскрывающихся списка. Список с левой стороны используется для выбора объекта, например, формы или элемента управления в форме. Список с правой стороны используется для выбора процеду­ры данного объекта.

РИСУНОК 3.Окно Code.

Окно Properties Window

Окно Properties (Свойства) используется для установки и просмотра свойств форм, отчетов или эле­ментов управления в формах и отчетах (рис. 4). Чтобы открыть окно Properties, необходимо в меню выбрать пункты View | Properties Window (Вид | Окно свойств) или нажать клавишу F4.

РИСУНОК 4. Окно Properties.

Окно Immediate (Отладка) можно использовать для оценки и установки переменных, запуска проце­дур и вывода для выраженийDebug.Print. Чтобы открыть окно Immediate, необходимо в меню выбрать команду View | Immediate Window (Вид | Окно отладки) или нажать Ctrl+G. Подробнее окно отладки описано далее в данной статье.

Окно Locals (Переменные) отображает выражения, значения и типы всех переменных текущей обла­сти действия. Чтобы открыть окно Locals, необходимо в меню выбрать команду View | Locals Window (Вид | Окно переменных). Более подробно окно переменных рассматривается далее в этой статье.

Окно Watch (Наблюдение) используется для оценки выражений во время выполнения приложения. Чтобы открыть окно Watch, необходимо в меню выбрать пункты View | Watch Window (Вид | Окно наблю­дения). Более подробно окно наблюдения рассматривается далее в этой статье.

Чтобы открыть Object Browser (Браузер объектов), необходимо в меню выбрать пункты View | Object Browser (Вид | Браузер объектов) или нажать клавишу F2. Браузер объектов используется для просмотра объектов, свойств и методов (рис. 5).

РИСУНОК 5. Браузер объектов.

Окно Call Stack

Окно Call Stack (Вызов стека) отображает ранее вызванные процедуры. Чтобы открыть окно стека, необходимо в меню выбрать команду View Call Stack (Вид | Вызов стека) или нажать Ctrl+L). Более подробно окно вызова стека рассматривается далее в данной статье.

Как рассматривалось ранее, в IDE можно отобразить достаточно большое количество окон. В IDE гораздо удобнее работать, если установить разрешение экрана 1024х768 или выше. Еще лучше воспользоваться функцией поддерж­ки нескольких мониторов Windows 98/Windows 2000.

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

Работа с объектом Debug

ОбъектDebug содержит два метода, которые могут оказаться полезными при отладке приложений:

Developing.ru

Access, как отловить запрос на закрытие формы?

Есть форма с полями, связанными с некоторой таблицей. На BeforeUpdate полей висят проверки корректности введенных данных. Unload формы контролирует правильность логического заполнения записи в целом (все ли занесено).

Надо сделать так, что если пользователь что-то не то или не до конца ввел, а затем закрыл форму (нажал крестик), то никакие мои таблички не вылетали бы, а форма бы закрылась с отменой изменений последней записи (Undo). Ну, или с вопросом о закрытии или продолжении корректировкии.

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

Как это можно осуществить?

Спасибо за ответы.

Во первых посмотрите, не достаточно ли Вам свойства «Условие на значение» в полях таблиц, а также у самОй таблицы (что позволяет вести проверку записи).

Везде ли вы использовали свойство «Обязательное поле»

Т.е. проверьте все ли стандартные средства для этих проверок (позволяющих не прибегать к программированию Вы использовали?

Ну а обработка закрытия формы это конечно же Form_Close!

Еще не забывайте, что не только у полей, но и у самой формы есть BeforeUpdate, которое вызывается как раз перед сохранением измененной записи в таблицу. Так что по идее достаточно написать только обработчик Form_BeforeUpdate и не делать никаких Undo, а просто напросто делать Cancel=true
В этом случае Access НЕ ПУСТИТ пользователя в другую запись, пока тот не сделает все как надо в это. А при закрытии либо все будет проходить нормально, либо форма будет закрываться с сообщением типа «Невозможно сохранение в данный момент». (Закрываться с потерей недовведенных данных разумеется).

Вся беда в том, что в Windows события возникают нормально. Сначала запрос на закрытие формы. Затем уже форма посылает сообщения своим элементам на BeforeUpdate, AfterUpdate и т.д. А потом, после их обработки, переходит обратно на свой Unload и Close.

Если по справке VBA полазить, то там есть такой обработчик, как Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer). Т.е., с его помощью можно отловить (и отменить) именно запрос на закрытие фомы, еще до того, как форма начнет сворачивать свои элементы.

Но в Access, кажись, ничего такого нет. Т.е., вся цепочка событий, от нажатия пользователем крестика, до вызова BeforeUpdate проходит незаметно. И BeforeUpdate — есть первое событие, которое возникает, как при переходе к другой записи, так и при попытке закрытия формы. Т.о., ну никак не получается различить, чем было вызвано BeforeUpdate — сменой записи, или закрытием формы. Тоже относится и к BeforeUpdate поля. Оно возникает еще раньше BeforeUpdate формы при ее закрытии.

Когда форма отображена как форма, то вопрос частично решается заменой стандартных кнопок навигации (влево/вправо + занести изменения) на свои. А в них уже прописывается проверка ошибок и фиксация изменений. Если же BeforeUpdate возникает, минуя кнопки, т.е., когда пользователь нажимакет крестик, то делается автоматическое Undo.

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

Пробовал сделать например так: OnDirty формы блокирует крестик и прочие возможности выхода. BeforeUpdate производит проверку логической правильности данных записи. Current или AfterUpdate восстанавливает крестик. Т.о., когда пользователь уже начал что-то вводить в поля записи, форму закрыть нельзя. Лишь после перехода к новой записи, естественно с проверкой по BeforeUpdate, возможность закрытия формы восстанавливается.
Но тут есть два неприятных моментя. Во-первых, не всякий пользователь правильно поймет данную идею, и вполне может запаниковать, когда крестик заблокируется, и будут постянно выскакивать таблички о необходимости корректировки данных. Конечно, будет предусмотрен выбор между продолжением коррекции или отменой, но, опять, нервы пользователя будут изредно подерганы.
А, во-вторых, ну не блокируется этот крестик. Другой элемент заблокировать можно, кнопку, например, через Enable. А вот CloseButton ничего присвоить не удается в ходе выполнения программы (Ошибка 2448 — невозможно присвоить значение объекту). Только прочитать. Хотя, в справке данное свойство описано как Read/Write.

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector