Створення програми в vba в access для автоматизації формування договорів в word

Наприклад, додаток Microsoft Access може використовувати автоматизацію з додатком Microsoft Word як сервер для створення нового документа Word. Створивши такий документ (тобто новий об'єкт Word. Document), програма Access отримує доступ до безлічі його властивостей додавання і форматування тексту, а також збереження з конкретним ім'ям файлу. Результатом стане створення файлу документа Word (з розширенням .doc) з середовища додатки Access.

Автоматизація не переносить об'єкти з однієї програми до іншої. Замість цього вона дозволяє одному з додатком управляти об'єктами, створеними іншим додатком. І в цьому укладено їх головна відмінність. Наприклад, якщо ви використовуєте Microsoft Word як сервер автоматизації, то користувач повинен мати на своєму комп'ютері це додаток встановленим. У той же час користувачеві не доведеться запускати додаток і маніпулювати ним вручну - за нього це зробить програма автоматизації.

3.2 Створення посилань на об'єкти

Клієнтам автоматизації потрібен спосіб визначення того, які саме об'єкти конкретного сервера автоматизації вони можуть використовувати в своїй роботі. Ця інформація зберігається в файлах, які називаються бібліотеками типів, зазвичай мають розширення .tlb або .olb. Бібліотеки типів містять інформацію про:

Незважаючи на те, що для використання об'єктів з сервера автоматизації зовсім не потрібно обов'язкова наявність бібліотеки типів, вона стане непоганою підмогою. Рекомендується завжди використовувати бібліотеку типів. Для використання ж бібліотеки типів при автоматизації на них потрібно встановити посилання.

Малюнок 3.1 - Додавання посилань на бібліотеки типів

  1. Знаходимо в списку пункт Microsoft Word 12.0 Object Library і встановлюємо на ньому прапорець.
  2. Клацаємо на кнопці ОК, і посилання на ці бібліотеки типів будуть додані в поточну базу даних Access.

Після того як посилання на бібліотеки типів додані, можна знайти їх об'єкти в «Обозревателе об'єктів». Щоб запустити цей оглядач, потрібно натиснути клавішу F2. Після цього вибрати потрібну бібліотеку типів в комбінованому списку Project / Library.

3.3 Створення об'єктів на сервері автоматизації

Для роботи з об'єктами з іншої програми їх потрібно спочатку створити в тексті програми Access. Існує три способи реалізувати цю операцію:

  • використання функції CreateObjесt;
  • використання функції GetObject;
  • використання раннього зв'язування.

3.3.1 Використання функції CreateObject

Функція CreateObject дозволяє визначити об'єкт по його імені і створити один його примірник. Ось короткий приклад її використання:

'Використання Word в якості сервера автоматизації

'За допомогою функції CreateObject

Dim objWord As Object

Set objWord = CreateObject ( "Word. Application")

В даному прикладі для посилання на створюваний об'єкт використовується змінна спеціального типу Object. Це тип змінних, які можуть посилатися на будь-які об'єкти: на документ Word, на діаграму Excel, на форму Access.

Функція CreateObject перетворює узагальнену змінну об'єкта в конкретний тип об'єкта. Аргументом функції CreateObject є те, що відомо під ім'ям ProgID (ідентифікатор об'єкта). Це - унікальне значення, зіставлене з типом створюваного об'єкта. Більшість ідентифікаторів об'єкта можна отримати, об'єднавши назва програми з ім'ям його об'єкта. Так, ідентифікатор Word.Application відповідає об'єкту Applilcation додатки Word (а не власному об'єкту Application додатки Access).

Після того як рядок програми з викликом функції CreateObject відпрацювала, змінна objWord вже посилається на екземпляр об'єкта Application додатки Word. Цей об'єкт є сесію роботи з Microsoft Word (так само як об'єкт Application додатки Access являє сесію роботи з останнім). Однак якщо встановити на цьому рядку контрольну точку і зупинитися в цьому місці, ніде не знайдеться запущеного додатку Word. Це відбувається тому, що Word, так само як і більшість інших серверів автоматизації, запускається в невидимому режимі при виклику з програми автоматизації. У наступному рядку програми властивості видимості додатка Word присвоюється значення True, в результаті чого вікно цієї програми відображається на екрані.

І нарешті, викликається метод Quit об'єкта Application додатки Word. Це - еквівалент виклику команди «Вихід» в меню «Файл».

Крім нової функції CreateObject в даному прикладі відсутній будь-який новий синтаксис. Після того як витягується об'єкт автоматизації, можна використовувати його властивості та методи точно так же, як і в будь-якому об'єкті Access.

3.3.2 Використання функції GetObject

Функція GetObject дуже близька до функції CreateObject. Ось приклад її використання:

'Використання Word в якості сервера автоматизації

'За допомогою функції GetObject

Dim objWord As Object

Set objWord = GetObject ( "", "Word.Application")

Якщо запустити на виконання цю процедуру, то виявляємо, що вона працює в точності так само, як і CreateObjectDemo. У той же час, між функціями CreateObject і GetObject відзначається два суттєві відмінності:

  • Функція CreateObject завжди створює новий екземпляр сервера автоматизації. Функція GetObject може використовувати той екземпляр, який вже запущений в системі.
  • Функція GetObject має перший, необов'язковий параметр, що задає документ. Якщо викликати її наступним чином: GetObject ( «з: \ temp \ doc1.doc», «Word.Application»), то при необхідності буде створений екземпляр об'єкта Aplication, і в цей додаток буде завантажений документ, що знаходиться в заданому файлі.

Функцію GetObject краще використовувати тоді, коли потрібно працювати з певним документом або коли ви зіткнулися з проблемою мінімізації впливу додатки автоматизації на задіяні в системі ресурси (це більше відноситься до комп'ютерних систем з обмеженими ресурсами пам'яті), так як в даному випадку не запускається кілька додаткових копій додатки сервера автоматизації.

3.3.3 Використання раннього зв'язування

Функції CreateObject і GetObject використовують те, що в програмуванні називають пізнім зв'язуванням. При пізньому зв'язуванні в тексті програми явно не вказується, який тип об'єкта буде використовуватися. Замість цього використовується об'єкт загального типу Object, а інтерпретатор VBA в ході виконання програми вже сам вирішує, який тип об'єкта створювати. Третім способом створення об'єктів є використання раннього зв'язування, яке дозволяє застосовувати рідні типи змінних сервера автоматизації безпосередньо в коді VBA.

Далі наведено приклад створення об'єкту, перетворений в метод раннього зв'язування:

'Використання Word в якості сервера автоматизації

'За допомогою раннього зв'язування

Dim objWord As Word.Application

Set objWord = New Word.Application

Рекомендується використовувати раннє зв'язування з кількох причин:

  • Чи не доведеться запам'ятовувати два різних синтаксису створення об'єктів.
  • Отримуємо всі переваги механізму IntelliSense при написанні програми, а це значить, що можна буде виявити помилки ще до того, як їх виявлять користувачі програми.
  • Раннє зв'язування працює швидше функцій CreateObject і GetObject.

3.4 Взаємодія з додатком Word

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

Створимо просту форму Access, що дозволяє вводити довільний текст і ім'я файлу. На цій формі створимо кнопку «Створити документ Word». Після клацання на кнопці створюється документ, що містить введений текст і збережений під ім'ям, введеним в нижньому текстовому полі форми.

Текст процедури обробки клацання на кнопці досить простий:

Private Sub cmdCreate_Click ()

'Копіюємо текст в документ Word

Dim objWord As Word.Application

'Почнемо Word і новий документ

Set objWord = New Word.Application

'Вставляємо текст після області за замовчуванням

'Це - початок документа

objWord.ActiveDocument.Range. InsertAfter (txtText.Value)

'Зберігаємо файл

'І відображаємо його

Єдиною складністю в цьому завданні є необхідність гарного знання об'єктної моделі Word, щоб змусити її робити те, що потрібно. Ключовими діями є створення документа і додавання в нього тексту. Для створення документа викликався метод Add колекції Documents. Додавання тексту - трохи більш складне завдання. Документи Word містять об'єкт Range, який представляє виділену зараз область тексту. Об'єкт Range має масу методів додавання тексту, в тому числі InsertAfter і InsertBefore. Відразу після створення документа тексту в ньому ще немає, тому об'єкт Range просто вказує на початок документа. Вставляючи текст після цієї точки, вставляємо його в самий початок документа - що якраз і потрібно.

4 Приклад створення програми для автоматизації формування договорів

  1. Створення бази даних і необхідних таблиць:

Запускаємо Microsoft Access і в меню «Файл» вибераем «Створити». У вікні «Створення файлу» вибераем «Нова база даних». Зберігаємо створену базу даних. В даному прикладі база даних буде знаходитися в кореневому каталозі диска C: і називатися Dogovors.mdb. У вікні бази даних переходимо на вкладку «Таблиці» і клацаємо два рази мишею по рядку «Створення таблиці в режимі конструктора». У створеній таблиці визначаємо три стовпці (рис. 4.1).

Малюнок 4.1 - Структура таблиці «Шаблони»

Зберігаємо цю таблицю як «Шаблони» і закриваємо вікно конструктора. У вікні бази даних на вкладці «Таблиці» ще раз клацаємо по рядку «Створення таблиці в режимі конструктора». Набір стовпців для нової таблиці повинен виглядати так:

Текстовий (первинний ключ)

Схожі статті