Vvmebel.com

Новости с мира ПК
34 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba access подчиненная форма

Ссылка на элемент управления подчиненной формы в другом модуле MS Access VBA

Попытка ссылаться на элемент управления подчиненной формы в VBA. У меня есть основная форма, которая с помощью кнопок открывает подчиненную форму. В этой подформе есть несколько кнопок, которые открывают другую подформу. В основном сценарий русской куклы с кнопками.

Конечная цель состоит в том, чтобы одна функция вызывалась с помощью подформы, используемой в качестве переменной в функции с именем GetFile. Обходной путь прямо сейчас заключается в том, что у меня есть разные версии функции GetFile в каждой подформе VBA.

Кнопка вот под-подчиненную форму, нажмите кнопку код:

Который затем вызывает этот модуль:

В настоящее время я получаю эту ошибку: Runtime Error ‘2465’.

1 Ответ

так что вы, наверное, хотите

хотя ваш вопрос немного запутан («открыть подчиненную форму»? Подчиненная форма встроена в родительскую форму).

Может быть проще передать объект формы вместо его имени в качестве параметра:

тогда не имеет значения, где в иерархии находится форма, просто используйте ее напрямую:

Похожие вопросы:

Я ищу некоторую команду, которая отключит все элементы управления, присутствующие в разделе ‘details’ формы MS Access. Один из способов-отключить каждый элемент управления самостоятельно. Я ищу.

У меня есть основная форма, которая содержит две другие дочерние подформы. Когда textbox изменения стоимости на подчиненной форме (a) я хотел бы установить значение textbox на подчиненной формы (Б).

У меня есть простая форма в Access 2003. Форма имеет элемент управления списком и кнопку. Я хотел сделать список для изменения размера с помощью формы (только по вертикали), в то время как кнопка.

У нас есть большой проект MS Access, который требует функциональности GUI, что трудно / невозможно сделать в среде форм VBA / access. Со временем мы хотим переписать/перенести в управляемую среду C#.

У меня есть база данных Access с огромным количеством форм (300+) и кодом VBA. Бэкэнд этой базы данных Access находится в MS SQL. Когда я нахожусь на элементе управления в форме (в formview), я хочу.

У меня есть форма с подформой. Субформа-это непрерывная форма, поэтому я могу использовать условное форматирование. С помощью элементов управления в элементе управления вкладки изменяются значения.

Моя форма Access 2007 имеет две кнопки под элементом управления tab (с подчиненной формой на каждой странице). С помощью вкладки или кнопки фокусируется, я могу tab в подчиненной форме на этой.

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

У меня есть форма, frmResults , которая содержит элемент управления subform, frmResultsSub . frmResultsSub — это элемент управления подчиненной формы, который содержит запрос вместо формы. Другими.

Я создал таблицу в MS-Access 2010, запустив следующий скрипт на SQL server 2008 SELECT * into qryInstrumentInterfacelog FROM tblInstrumentInterfaceLog qryInstrumentInterface используется для.

Обращение к подчиненной форме из VBA

Как правильно обратиться к подчиненной форме, а именно, отфильтровать подчиненную форму по значению в выпадающем списке. Форма: Find_form, Cписок: Имя транзистора (NameTr) Поле в подчиненной форме для фильтрации name_of_tr

Написал для события «после обновления»(в выпадающем списке) следующее:

Обращение к подчиненной форме
И это снова я.. к сожалению мои вопросы еще не исчерпаны(( Теперь мне не понятно вот чего: Как.

VBA открыть запрос в подчиненной форме
Есть форма f_seach , на ней расположены: множество полей и выпадающих списков, подчиненная форма.

Фильтрация записей в подчиненной форме через VBA
Здравствуйте! Подскажите пожалуйста, как в данном случае в коде прописать применение фильтра в.

Access + VBA: итоговая сумма по подчиненной форме
Привет всем форумчанам и гуру в VBA + Access, кто сможет подсказать и помочь много тем не охота.

Решение

где tempVar1 — временная переменная хронящая значение условия отбора для данного поля (разумеется для каждого поля свое имя tempVar)
3. при загрузке установите значение всех tempVar`s в значение NULL (эта конструкция даст возможность загрузить все записи подчиненной формы)
4. на событие После обновления, всех контролов фильтра, достаточно просто обновить подчиненную форму, а значения сами передатутся в запрос через tempVar`s и отфильтруют его.

Внимательно прочитайте пост с описанием tempVar`s там есть примеры как для VBA так и для SQL, но модуль написать (скопировать) прийдется )), какой из вариантов выбирать Вам.
Вроде все! Удачи!

Посмотрите этот вариант!

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

P/S: но при помощи этой функции, 3-5 контролов для ввода условий и возможно 1 дополнительной таблицы можно организовать фильтрацию на любое количество полей

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

Читать еще:  Access функции работы со строками

Функция MyTempVars в выложенном примере притянута за уши, чтобы выдать желаемое (см.рекомендации по ссылке) за действительное. Достаточно изменить запрос qryTBL1 таким образом

чтобы получить тот же результат без использования функции.

Создание формы, содержащей подчиненную форму (форма с отношением «один-ко-многим»)

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

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

В этой статье

Сведения о подчиненных формах

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

Подчиненные формы особенно удобны для отображения данных из таблиц или запросов с отношением «один-ко-многим». Отношение «один-ко-многим» представляет собой связь между двумя таблицами, при которой значение первичного ключа каждой записи в главной таблице соответствует значению в соответствующем поле или полях нескольких записей в связанной таблице. Например, можно создать форму, в которой отображаются сведения о сотрудниках и которая содержит подчиненную форму с заказами каждого сотрудника. Данные в таблице «Сотрудники» являются в отношении стороной «один». Данные в таблице «Заказы» являются в отношении стороной «многие» — для каждого сотрудника может быть несколько заказов.

1. В основной форме отображаются данные на стороне отношения «один».

2. В подчиненной форме выводятся данные на стороне отношения «многие».

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

В таблице ниже описаны некоторые термины, связанные с подчиненными формами. 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 можно так:

Читать еще:  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 count запрос

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

Создание формы, содержащей подчиненную форму (форма с отношением «один-ко-многим»)

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

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

В этой статье

Сведения о подчиненных формах

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

Подчиненные формы особенно удобны для отображения данных из таблиц или запросов с отношением «один-ко-многим». Отношение «один-ко-многим» представляет собой связь между двумя таблицами, при которой значение первичного ключа каждой записи в главной таблице соответствует значению в соответствующем поле или полях нескольких записей в связанной таблице. Например, можно создать форму, в которой отображаются сведения о сотрудниках и которая содержит подчиненную форму с заказами каждого сотрудника. Данные в таблице «Сотрудники» являются в отношении стороной «один». Данные в таблице «Заказы» являются в отношении стороной «многие» — для каждого сотрудника может быть несколько заказов.

1. В основной форме отображаются данные на стороне отношения «один».

2. В подчиненной форме выводятся данные на стороне отношения «многие».

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

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

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