ActiveX-объекты
Технология ActiveX обеспечивает взаимодействие приложений - Автоматизацию (Automation), при которой одно приложение управляет работой другого. На этой технологии построено взаимодействие приложений Office 97. И хотя у нас уже были примеры на эту тему, позволим привести еще один.
Чтобы начать работу с ActiveX-объектом, нужно объявить соответствующую переменную, создать сам объект и связать переменную с объектом. Один из способов выполнения этой работы - использовать спецификатор New в операторе объявления переменных, который в этой ситуации имеет вид:
Dim <имя переменной> As New <имя приложения.имя класса>
По сравнению с обычной конструкцией оператора объявления здесь более сложно задается тип (класс) создаваемого объекта. Первая часть - имя_приложения - указывает приложение, создающее объект, и в то же время это имя библиотеки типов данного приложения - TypeLib. Приложение является сервером, который вызывается для обеспечения работы с объектом. Вторая часть - имя_класса - задает тот конкретный класс, определенный в сервере, экземпляр ActiveX-объекта которого будет создан. Библиотека типов подключаемого приложения должна быть видимой, для чего надо включить ссылку на нее в меню References. Повторим с небольшими вариациями наш старый пример, в котором Excel подключается в приложении Word:
Public Sub WorkWithActiveX() 'Создание объекта Excel.Application при работе с документом Word Dim xlApp As Excel.Application 'Set xlApp = CreateObject("Excel.Application.9") Set xlApp = New Excel.Application xlApp.Application.Visible = True 'Добавить новую книгу xlApp.Workbooks.Add 'Теперь можно работать и с ячейками данной книги xlApp.Workbooks(1).Activate xlApp.Range("A1:A2") = 2 xlApp.Range("B1") = "=A1+A2" xlApp.Range("B2") = "=A1*A2" 'Закрываем открытую книгу без сохранения изменений xlApp.Workbooks(1).Close SaveChanges:=False 'Закрываем приложение xlApp.Quit End Sub
Создание Excel приложения в данном случае возможно двумя способами - применением конструкции New или функции CreateObject.
Однако, использование New для создания ActiveX- объектов не всегда возможно. Не все приложения допускают такой способ подключения, и не все объекты доступны, - например, недоступны внутренние ActiveX-объекты, которые совместно могут храниться в одном и том же файле. Более универсальный способ создания ActiveX-объектов - вызов специальных функций CreateObject и GetObject. Как правило, вызов этих функций помещается в правую часть оператора Set. В результате его выполнения объектное выражение возвращает ссылку на созданный объект, которая и становится значением переменной.
Синтаксис функции CreateObject таков:
CreateObject(<класс>)
Параметр класс - строка, задающая класс объекта, у которой две обязательные части: "имя_приложения.имя_класса"; ее вид совпадает с видом задания класса ActiveX-объектов в операторе объявления.
Функция GetObject имеет дополнительный параметр:
GetObject(<путь>, <класс>)
Параметр путь задает полный путь к файлу, содержащему ActiveX-объект. Этот объект и активизируется. Второй параметр при этом необязателен. Но если файл содержит группу ActiveX-объектов разных классов, задать его необходимо. Можно опустить и первый параметр, если ActiveX-объект этого класса уже создан, и тогда возвращается ссылка на активный объект заданного класса. Вот пример, в котором читается книга Excel, используя метод GetObject. Обратите внимание, книга создается без предварительного создания объекта Application:
Public Sub WorkWithGetObject() Const MY_PATH As String = "e:\O2000\CD2000\Ch4\" Dim myBook As Excel.Workbook Set myBook = GetObject(MY_PATH & "BookOne.xls") With myBook .Application.Visible = True 'Чтобы увидеть книгу, включите ее в окне UnHide из меню Window .Charts("Динамика Продаж").Activate 'Посмотрев на диаграмму, переключимся на рабочий лист MsgBox ("Вы можете перейти в Excel") .Worksheets(1).Activate .Worksheets(1).Range("A40") = 777 .Save .Application.Quit End With End Sub