Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskoe posobie dlya VBA for Excel.303.doc
Скачиваний:
9
Добавлен:
01.05.2025
Размер:
991 Кб
Скачать
☆

Технология ole

OLE имеет значительно больше возможностей, чем DDE. Если DDE просто обеспечивает обмен данными между программами, то OLE позволяет передавать объекты. Существуют 2 различных типа OLE: Linking and Embedding (Связь и внедрение) и OLE Automation(Автоматизация OLE).

С помощью Linking and Embedding вы внедряете объекты одной программы в документы другой. Внедряемые объекты создаются копированием объекта в одной программе, а затем вклеиванием связи с этим объектом в другую программу. После этого объект можно редактировать в породившей его программе. Программа, отображая внедренный объект, не должна ничего знать о том, как он создается и ли изменяется, - она только отображает этот объект.

OLE Automation позволяет одному объекту управлять другой программой посредством доступа к ее объектам и методам. При использовании OLE Automation Объекты и методы подключенной программы становятся расширением языка Visual Basic.

Применение OLE Automation

Прежде чем использовать объекты и методы другой программы, вы должны все узнать об этих объектах. Если данная программа содержит библиотеку объектов, зарегистрированную в системе и доступную, вы можете использовать Object Browser для ознакомления с объектами и методами, включенными в эту библиотеку. Если программа не разрешает доступ к библиотеке, то вы должны обратится к документации на программу - чтобы ознакомится с доступными объектами и методами. Для получения объектов программы с помощью Object Browser необходимо зарегистрировать эту программу в Excell. Вначале укажите директиву Tools/ References для отображения диалогового окна References. Затем включите контрольный индикатор, соответствующий данной программе, в окне списка Avalaible References. После того, как программа зарегистрирована, все ее объекты становятся доступными Visual Basic.

Теперь вы можете использовать Object Browser для изучения объектов другой программы. Кроме того, Object Browser отображает имя, под которым зарегестрирована в системе данная программа.

Предупреждение

Имя, используемое в целях регистрации программы для коммуникаций OLE, отличается от имени используемого для DDE. Это объясняется тем, что связывается OLE с программой, а DDE - с объектами из библиотеки ee oбъектов.

Объекты другой программы могут иметь те же имена, что и объекты в вашей программе; следовательно, для доступа надежнее пользоваться полными именами. Например если вы запустите MS Excell VBA и выполните оператор APPlication.Name

то получите имя Excell. Но если вы выполните оператор

Msproject. APPlication.Name

то получите имя Project.

Для доступа к любому объекту, находящемуся вне текущей программы, используете полную ссылку, что не только даст возможность уверенно получить нужный объект, но и повысить читабельность вашей программы.

Создание и открытие объектов.

Для программ, управляемых посредством OLE Automation , существуют 2 метода создания новых объектов или открытия уже существующих объектов: Createobject() и GetObject(). В общем случае объектами, к которым вы получаете доступ с помощью указанных методов, являются документы подключенных программ. Для полностью OLE - согласованных программ, таких как Excell, открытие или создание новых файлов осуществляется методами связанных объектов а не методами Create object() и GetObject(). Для частично OLE - согласованных программ вроде Word создание связей с документами обеспечивается с помощью методов.

Метод Createobject имеет синтаксис

Set объектная_переменная = Createobject(класс)

где объектная_переменная представляет собой любую переменную типa Object или Variant, а класс является классом создаваемого объекта. Аргумент класс состоит из двух частей, разделенных точкой:

Регистрационное_Имя.Объект

где Регистрационное_Имя - имя под которым программа зарегестрирована в системе, а Объект - тип создаваемого объекта. Для Excell тип объекта может принимать значения Application, Sheets и Charts, для Word - Basic.

Так следующий оператор запускает Excell и создает новую таблицу:

Set Xlsheet = createObject(«Excell.Sheet»)

Если Excell уже запущен и рабочая папка уже открыта, то оператор добавит новую таблицу к открытой рабочей папке. Если Excell не запущен, то оператор запускает Excell с новой рабочей папкой.

Следующий оператор запускает Word и возвращает объект, на который можно ссылаться как на Word Basic:

Set WordSheet = createObject(«Word.Basic»)

Примечание:

Поскольку программа Word не полностью OLE - согласованна, то ссылкой является Word Basic, а не конкретный документ. Word Basic встроен в Word средством программирования на . Большинство директив Word Basic доступны связанной программе. Эти директивы пересылаются программе Word как методы объекта Word Basic. Фактически Word интерпретирует эти директивы, применяя их к текущему документу как к объекту.

Метод GetObject открывает существующий объект. Метод имеет синтаксис:

Set объектная_переменная = GetObject(Имя_файла,класс)

где объектная_переменная и класс имеют те же значения что и для метода. Имя_файла - путь и имя файла для открытия объекта. Если расширение файла позволяет определить класс объекта, то аргумент класс можно опустить. Метод не запускает программу если она не запущена на момент выполнения метода.

Например следующий оператор открывает таблицу COST.XLS в директории PROJ диска D:

Set Xlsheet = GetObject(«D:\PROJ\COST.XLS», «Excell.Sheet»)

Примечание :

Экспериментируя с объектами OLE и программами, вы можете столкнуться с одной проблемой - разрушение системы. При проверке вашей новой программы вы будете сталкиваться с ее крахом до тех пор пока не устраните последнюю ошибку. Каждый из этих крахов будет оставлять связь, которая будет мешать корректной работе системы. В таком случае дальнейшая работа Windows будет невозможной и придется перегрузить Windows для устранения путаницы.

Примечание :

Поскольку связи OLE подвержены ошибкам, вы должны уметь определять, какая из процедур обработки ошибок необходима для предотвращения вашей программы из-за ошибок связи OLE. Процедура обработки ошибок может попробовать повторно установить связь или завершить процедуру - в зависимости от того, какая директива явилась причиной ошибки. Если вы попытаетесь установить связь повторно, то используйте счетчик, который позволит избежать зацикливания.

95