Об'єкт і робота з формами 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?

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). З цього ж вікна зазвичай проводиться створення нових форм або зміна існуючих.

Об'єкт і робота з формами access засобами vba

Мал. 12.1 Вікно для роботи з формами в Access

Ще один часто використовуваний спосіб - просто запускати форму при відкритті бази даних Access. Для цього в меню Сервіс потрібно вибрати Параметри запуску і вибрати потрібну форму в списку Висновок форми / сторінки. Якщо при цьому ви приберете всі інші прапорці, то додаток при відкритті додаток може виглядати так, як показано на рис. 12.2:

Об'єкт і робота з формами access засобами vba

Мал. 12.2 Всі зайві можливості Access заховані від користувача

Вікно бази даних буде приховано від користувача, а це значить, що користувач не зможе отримати інформацію ні про таблиці нашої бази даних, ні про інших формах, ні про модулях - все службові елементи бази даних будуть від нього заховані. В принципі, користувач може обійти такий захист, тримаючи натиснутою при запуску Access кнопку , але програмним способом можна закрити і таку можливість.

Якщо все-таки потрібно відкрити форму програмним способом (наприклад, з іншої форми), то для цієї мети можна використовувати метод DoCmd.OpenForm (). У найпростішому варіанті цей метод просто приймає параметр з ім'ям форми:

Якщо ж форма вже відкрита, то цей метод, звичайно, не відкриває форму заново, а просто активізує її. Метод DoCmd.OpenForm () приймає також кілька необов'язкових параметрів, за допомогою яких ви можете налаштувати фільтр на відображення записів в формі, режим відкриття форми (наприклад, модальність) і т.п. Закриття форми проводиться за допомогою методу DoCmd.Close (). Якщо ж вам потрібно просто сховати форму, щоб зберегти введені на ній користувачем значення і відобразити їх при наступному показі, можна просто зробити форму невидимої, призначивши її властивості Visible значення False.

Форма нам зазвичай потрібна не сама по собі, а як контейнер для розташованих на ній елементів управління. Зазвичай елементи управління програмним способом створювати не потрібно - набагато простіше і зручніше помістити їх на форму в режимі конструктора для форми. У наборі елементів управління для форми передбачені як знайомі нам елементи управління - текстові поля, написи, кнопки, прапорці та перемикачі, так і нові елементи - вільна і приєднана рамки об'єктів, розриви сторінок, підлеглі форми / звіти і т.п. У верхньому правому куті Toolbox в конструкторі форми Microsoft Access знаходиться спеціальна кнопка Майстра. Якщо вона натиснута, то додавання на форму звичних елементів управління (наприклад, кнопки) призведе до появи вікна майстра, який спробує допомогти вам автоматично згенерувати потрібний код VBA для цього елемента управління (див. Рис. 12.3)

Об'єкт і робота з формами access засобами vba

Мал. 12.3 Майстер створення кнопок

Можна використовувати генерований майстром код як замінник макрорекордер (якого в Access немає), щоб зрозуміти, як можна виконати ті чи інші дії.

Для чого використовуються нестандартні (по відношенню до звичайних форм VBA) елементи управління:

Наприклад, припустимо, що в нашій базі даних Access знаходиться таблиця з трьома стовпчиками, як показано на рис. 12.4.

Об'єкт і робота з формами access засобами vba

Мал. 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, яка вміє працювати з іменами елементів управління:

Схожі статті