Інтеграція Access з іншими компонентами офісу - Програмні продукти
Програмуючи в Access не варто забувати, що він є частиною пакету Microsoft Office, тому один із плюсів MS Access як засобу розробки – інтегрованість з такими потужними програмами як Word, Excel, PowerPoint, Outlook. Звичайно, отримати доступ до них можна не тільки за допомогою Access, але, починаючи з версії MS Office 2000, всі вони мають одну спільну мову програмування - VBA. І в цій серії статей розглянемо приклади використання такої інтеграції, або як її ще називають – автоматизації.
Автоматизація (раніше відома як OLE-автоматизація - OLE Automation) - це один з найважливіших засобів технології ActiveX, що дозволяє програмно керувати об'єктами з інших програм. І це основний засіб, за допомогою якого можна інтегрувати функціональні можливості різних програм.
Клієнти та сервери автоматизації
При інтеграції двох програм одна надає свої об'єкти для використання, а інша використовує об'єкти першої програми.
- Додаток, об'єкти якого доступні для інших програм, називається сервером автоматизації (іноді його ще називають компонентом)
- Програма, яка використовує об'єкти іншої програми, називається клієнтом (або контролером) автоматизації. Об'єкти, доступні для інших програм, називають об'єктами автоматизації
Для програмного управління об'єктом автоматизації з будь-якої програми Microsoft Office необхідно:
- Встановити посилання на бібліотеку об'єктів програми-сервера автоматизації.
- Створити об'єкт потрібного класу.
- Здійснити всі необхідні дії над об'єктом, звертаючись до його властивостей та методів.
- Закрити об'єкт.
Microsoft Access як клієнт автоматизації
Щоб створити об'єкт для використання в операціях автоматизації, потрібно спочатку створити екземпляр його класу і надати посилання на нього об'єктної змінної. Однак створити можна не будь-який об'єкт із об'єктної моделі програми-сервера, а лише глобальні об'єкти. Таким глобальним об'єктом для всіх об'єктних моделей програм сімейства Microsoft Office є об'єкт Application, що знаходиться на вершині ієрархії об'єктів.
- За допомогою ключового слова New
Це ключове слово визначає змінну типу Object і одночасно встановлює посилання на новий екземпляр класу об'єкта.
Dim App як New Excel.Application
При використанні ключового слова New для створення нового екземпляра класу Application запускається відповідна програма (наприклад, Word або Excel). Якщо ця програма вже запущена, то, щоб не запускати другий екземпляр, краще використовувати для створення нового екземпляра класу функцію GetObject ()
Sub PowerPointOpenFile_Click() On Error GoTo Err_ Dim strAppName As String Dim app As New PowerPoint.Application ‘ створюємо екземпляр класу strAppName = CurrentProject.Path & "\Презентація1.ppt" ' вказуємо шлях до файлу Презентація1.ppt With app .Visible = True 'виявляємо PowerPoint .Presentations.Open strAppName ' відкриваємо файл Презентація1.ppt End With Set app = Nothing' звільняємо змінну Exit_: Exit Sub Err_: MsgBox Err.Description Resume Exit_ End Sub
- За допомогою функції CreateObject()
Set app = CreateObject ("Excel.Application")
Об'єктна змінна у разі може бути оголошена як Object, і тоді посилання бібліотеку об'єктівMicrosoft Word встановлювати не потрібно. А може бути оголошено так:
Set app = CreateObject("Excel.Application.11")
Приклад використання функції:
Sub ExcelOpenFile() On Error GoTo Err_ Dim strAppName As String Dim app As Excel.Application strAppName = CurrentProject.Path & "\Книга1.xls" ' вказуємо шлях до файлу Книга1.xls Set app = CreateObject("Excel.Application") ' створюємо екземпляр класу With app .Visible = True ' «виявляємо» Excel <12. Resume Exit_ End Sub
- За допомогою функції GetObject()
Цей спосіб використовується для отримання посилання на вже існуючий екземпляр класу, тобто для доступу до існуючих документів, що зберігаються у файлах, або для доступу до об'єкта Application вже запущеної програми-сервера. Функція Getobject () має наступний синтаксис:
Обов'язково має бути зазначений хоча б один із аргументів функції!
Розглянемо три варіанти написання функції:
- Set app = GetObject(, "Excel.Application")
тут опускається перший параметр - тоді функція працює подібно до двох вищесказаних - просто для створення екземпляра класу об'єкта.
- Set app = GetObject("C:\Baze\ Книга1.xls", "Excel.Application")
тут вказано обидва параметри - шлях до файлу та ім'я програми. У цьому випадку запускається файл Аркуш.xls
- Set app = GetObject("C:\Baze\ Книга1.xls")
Приклад використання функції:
Sub WordOpenFile() On Error GoTo Err_ Dim strAppName As String Dim app As Word.Application strAppName =CurrentProject.Path & "\Doc1.doc" Set app = GetObject("", "Word.Application") З app .Visible = True .Documents.Open strAppName End With Set app = Nothing Exit_: Exit Sub Err_: MsgBox Err.Description Resume Exit_ End Sub
Наприклад: відкриваємо файл excel, вибираємо Сервіс – Макрос – Почати запис. У діалоговому вікні присвоюємо ім'я макросу і тиснемо «ОК». Далі робимо свої справи – форматуємо осередки, змінюємо дані – все що завгодно. Послідовність дій записується у спеціальний модуль як команд VBA. Тиснемо зупинити запис. Потім Сервіс – Макрос – Редактор Visual Basic і в групі Modules знаходимо новий модуль. Відкриваємо і дивимося, як все, що ви робили виглядає на VBA.
Після того як всі необхідні операції з об'єктами програми-сервера виконані, ці об'єкти слід закрити, щоб звільнити пам'ять, яку вони займають. Більшість об'єктів підтримують цього методи close чи Quit. Крім того, слід звільнити об'єктну змінну, надавши їй значення Nothing.
У прикладі, що додається, показані варіанти відкриття документів Word, Excel, Power Point. Для різноманітності для кожного документа використано один із трьох способів відкриття. Але, зрозуміло, будь-який із документів можна відкрити будь-яким із способів. Приклад качати тут.
PS: Приклад зроблено в Access 2002. При відкритті його в Access 2000 потрібно буде через Tools - References перевизначити посилання на Word, Excel та Power Point з 11.0 на 10.0