Microsoft Excel

  • doc
  • 14.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 52. Microsoft Excel.doc

Автоматизация в Excel. Начало

     При работе с Excel иногда приходиться налаживать взаимодействие программного кода с другими приложениями офисного пакета или вне него, например с Internet Explorer. Так сказать связывать. Для примера возьмем Word, хотя и IE вставим немного.

     Начнем с понятия о позднем и раннем связывании (привязке).

 

     Управлять Word из других приложений позволяет сервер автоматизации Word. Такой же сервер есть и у других офисных приложений (и не только офисных). В данном случае, сервером будет считаться Word, а клиентом Excel. Из него будут посылаться запросы на выполнение некоторого кода, а сервер автоматизации Word будет обрабатывать эти запросы. Это теоретически означает возможность написания программного кода в Excel, который будет выполняться в Word и использовать встроенные функции Word. Для использования такой возможности необходимо указать ссылку на библиотеку, функционал которой собираемся использовать. В данном случае Word. Это можно сделать двумя путями: указать библиотеку явно, до исполнения программного кода и во время исполнения программного кода.

 

     Первый способ называется раннее связывание. В меню Tools-References редактора vba выберите Microsoft Word12.0 Object Library. В других версиях офисных пакетов, как вы понимаете, цифры другие.

Это ссылка на файл WSWORD.OLB с библиотекой.
Теперь в браузере объектов доступен объект Word во всей красе своей объектной модели.

При раннем связывании новый экземпляр класса Word будет создаваться так:

view plainprint?

1.        Dim WApp As Word.Application  

2.        Set WApp = New Word.Application  

     Второй способ называется позднее связывание. При этом нет необходимости указывать ссылку на библиотеку. Создается экземпляр класса (объект) и возвращается ссылка на него используя функцию CreateObject.


Синтаксис CreateObject:
CreateObject(класс,[имясервера])

класс - обязательный параметр. Тип данных Variant(String). Имя приложения и класс, на основе которого создается объект. Имеет синтаксис имяприложения.названиекласса
имясервера - необязательный параметр. Имя компьютера в сети, где объект будет создан. Если параметр не указан (пустая строка), объект будет создан на локальной машине.

Примеры создания объекта при позднем связывании:

Создает новый объект Word.Application

view plainprint?

1.        Dim WApp As Object  

2.        Set WApp = CreateObject("Word.Application")  



Создает новый объект Word.Application и делает его видимым.

view plainprint?

1.        Dim WApp As Object  

2.        Set WApp = CreateObject("Word.Application")  

3.        WApp.Visible = True  



Создает объект на удаленной машине. Для этой операции необходимо иметь соответствующие права доступа.

view plainprint?

1.        Dim WApp As Object  

2.        Set WApp = CreateObject("Word.Application""192.168.1.4")  

 

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

view plainprint?

1.        Dim WApp As Object  

2.        Set WApp = CreateObject("Word.Application.12")  

Замечания: создаваемый объект Word.Application невидимый. Это ускоряет работу с ним, но в случае возникновения ошибки, он остается в памяти. Используйте WApp.Visible = True в обработчике ошибок. Каждый раз при использовании функции CreateObject будет создан новый объект.

Если объект приложения уже создан, то использовать функцию CreateObject не стоит. Вместо нее целесообразно применять функции GetObject, которая просто возвращает ссылку на объект.


Синтаксис GetObject:
GetObject([
путь][,класс])

путь - необязательный параметр. Тип данных Variant(String). Полный путь к файлу, связанному с объектом.
класс - Не обязательный параметр. Тип данных Variant(String). Строка, указывающая, на какой тип объекта будет сделана ссылка. Если параметр путь не указан, тот параметр обязателен.

Примеры ссылки на объект при позднем связывании:

Передает ссылку на существующий объект Word.Application и возвращает количество открытых там документов.

view plainprint?

1.        Dim WApp As Object  

2.         Set WApp = GetObject(, "Word.Application")  

3.        Debug.Print WApp.Documents.Count  

 

Создает ссылку на открытый в word файл Pacienti.txt и подсчитывает количество строк в нем, однако если документ не открыт, будет ошибка.

view plainprint?

1.        Dim WDoc As Object  

2.        Set WDoc = GetObject(ThisWorkbook.Path & "\Pacienti.txt")  

3.        Debug.Print WDoc.Sentences.Count  



Вот пример с перехватом ошибки отсутствия открытого файла:

view plainprint?

1.        Dim WDoc As Object  

2.         On Error GoTo cvv_Error  

3.         Set WDoc = GetObject(ThisWorkbook.Path & "\Pacienti.txt")  

4.         Debug.Print WDoc.Sentences.Count  

5.         On Error GoTo 0  

6.         Exit Sub  

7.        cvv_Error:  

8.         If Err.Number = 432 Then MsgBox "Файл " & ThisWorkbook.Path & "\Pacienti.txt" & не открыт..."  



Вот пример позднего связывания с Internet Explorer:

view plainprint?

1.        Dim IE As Object  

2.        Set IE = CreateObject("InternetExplorer.Application")  

3.         IE.Visible = True  

Ну а для раннего связывания с этим браузером, необходимо дать ссылку на библиотеку Microsoft Internet Controls. Ну а если планируется работать с интернет страницами (разбор структуры и данных), то и Microsoft HTML Object Library.

     У позднего связывания только одно преимущество: ссылка на библиотеку не слетит никогда (если приложение зарегистрировано в системе). Используйте этот способ, если не уверены, что у конечного пользователя версия офисного пакета совпадет с вашей. В любом другом случае лучше использовать раннее связывание, и на это две причины:
1.    Объектная модель приложения доступна в браузере объектов Excel.
2.    Быстродействие не страдает, и работают все функции.

Вместо послесловия:
     В этой маленькой статье я рассказал о способах подключения к объектной модели приложения. Как ее использовать – огромная, требующая отдельных статей тема. Конечно, использовать приложения не зная их объектной модели не получится. Используйте автоматизацию с умом, без лишних выдумок. Видел я как-то приложение в Excel, которое, чтобы вставить данные из таблицы Access на лист, создавало экземпляр Access, открывало файл базы данных, затем из этого экземпляра  копировало таблицу на лист, затем закрывало экземпляр. Хотя проще и быстрее было использовать доступ к данным при помощи ADO или даже DAO…

 


Скачано с www.znanio.ru