Наприклад, додаток Microsoft Access може використовувати автоматизацію з додатком Microsoft Word як сервер для створення нового документа Word. Створивши такий документ (тобто новий об'єкт Word. Document), програма Access отримує доступ до безлічі його властивостей додавання і форматування тексту, а також збереження з конкретним ім'ям файлу. Результатом стане створення файлу документа Word (з розширенням .doc) з середовища додатки Access.
Автоматизація не переносить об'єкти з однієї програми до іншої. Замість цього вона дозволяє одному з додатком управляти об'єктами, створеними іншим додатком. І в цьому укладено їх головна відмінність. Наприклад, якщо ви використовуєте Microsoft Word як сервер автоматизації, то користувач повинен мати на своєму комп'ютері це додаток встановленим. У той же час користувачеві не доведеться запускати додаток і маніпулювати ним вручну - за нього це зробить програма автоматизації.
3.2 Створення посилань на об'єкти
Клієнтам автоматизації потрібен спосіб визначення того, які саме об'єкти конкретного сервера автоматизації вони можуть використовувати в своїй роботі. Ця інформація зберігається в файлах, які називаються бібліотеками типів, зазвичай мають розширення .tlb або .olb. Бібліотеки типів містять інформацію про:
Незважаючи на те, що для використання об'єктів з сервера автоматизації зовсім не потрібно обов'язкова наявність бібліотеки типів, вона стане непоганою підмогою. Рекомендується завжди використовувати бібліотеку типів. Для використання ж бібліотеки типів при автоматизації на них потрібно встановити посилання.
Малюнок 3.1 - Додавання посилань на бібліотеки типів
- Знаходимо в списку пункт Microsoft Word 12.0 Object Library і встановлюємо на ньому прапорець.
- Клацаємо на кнопці ОК, і посилання на ці бібліотеки типів будуть додані в поточну базу даних 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 Приклад створення програми для автоматизації формування договорів
- Створення бази даних і необхідних таблиць:
Запускаємо Microsoft Access і в меню «Файл» вибераем «Створити». У вікні «Створення файлу» вибераем «Нова база даних». Зберігаємо створену базу даних. В даному прикладі база даних буде знаходитися в кореневому каталозі диска C: і називатися Dogovors.mdb. У вікні бази даних переходимо на вкладку «Таблиці» і клацаємо два рази мишею по рядку «Створення таблиці в режимі конструктора». У створеній таблиці визначаємо три стовпці (рис. 4.1).
Малюнок 4.1 - Структура таблиці «Шаблони»
Зберігаємо цю таблицю як «Шаблони» і закриваємо вікно конструктора. У вікні бази даних на вкладці «Таблиці» ще раз клацаємо по рядку «Створення таблиці в режимі конструктора». Набір стовпців для нової таблиці повинен виглядати так:
Текстовий (первинний ключ)