КОНСПЕКТ ОБЗОРНОЙ ЛЕКЦИИ

Для студентов специальности
Т1002 «Программное обеспечение информационных технологий»

(А.М.Кадан, к.т.н., доцент)

 

Вопрос № 37. Автоматизация обработки офисных документов.

 

  1. Концепция активных документов Microsoft.
  2. Автоматизация работы в MS Excel и MS Word.
  3. Структура проекта.
  4. Макросы и макрорекодер.
  5. Основные понятия языка VBA
  6. Объекты-наборы.

 

Концепция активных документов Microsoft

В любом документе Microsoft Office - будь то документ MS Word, рабочая книга MS Excel, презентация MS PowerPoint - есть две основных составляющих: содержимое (content) и функциональность. Содержимое это данные, содержащиеся в документе: слова, числа, графика; информация об атрибутах отдельных элементов (размер окна документа, цвет изображения или размер шрифта того или иного слова). Функциональность - это способы работы с содержимым документа (например: действия, выполняемые при открытии, закрытии документа, модификации его данных, редактировании или форматировании его элементов).

Причем САМ документ должен "знать", как реагировать на такие ситуации, т.е. он должен быть "активным" - содержать в себе весь программный код, выполняющий необходимые действия.

 

Объектные модели приложений пакета MS Office

Содержимое и функциональность приложения разбиваются на дискретные единицы, называемые объектами. Некоторые объекты уже известны Вам как элементы пользовательского интерфейса: рабочие книги, рабочие листы и диапазоны ячеек Microsoft Excel; документы и разделы Word; презентации и слайды PowerPoint.

Объектом верхнего уровня является объект Application, представляющий само приложение. Например, в модели объектов Microsoft Excel таковым является сам Microsoft Excel. Объект Application содержит другие объекты, доступ к которым возможен только в тот период, когда существует объект-приложение (т. е. при выполнении приложения). Так, объект Application Microsoft Excel содержит объекты Workbook, а объект Application Word объекты Document. Поскольку существование объекта Document зависит от существования объекта Application Word, принято говорить, что объект Document потомок объекта Application, и наоборот, объект Application предок объекта Document.

У многих объектов-потомков у самих есть потомки. Скажем, объект Workbook Microsoft Excel содержит набор (семейство, коллекцию, collection) объектов Worksheet (или является их предком); этот набор представляет все листы рабочей книги. У объекта-предка может быть несколько потомков например, у объекта Window в Word есть объекты-потомки Panes, Selection и View. По аналогии и у потомка может быть несколько предков, в частности объект-набор Windows в Wordпотомок как объекта Application, так и объекта Document.

Взаимосвязь объектов, составляющих приложение, вкупе с тем, как содержимое и функциональные возможности приложения распределяются между объектами, называют иерархией объектов, или моделью объектов. Графическое представление объектных моделей приложений MS Excel и MS Word представлено на рис.1,2. Полную информацию о структуре объектов можно получить из справочных файлов Visual Basic и Просмотрщика объектов (Object Browser). (Если при установке Office Вы выбрали режим Typical (Обычная), Вам придется запустить программу Setup еще раз и установить справочные файлы Visual Basic для приложений, в которых Вы хотите заняться программированием).

Каждый объект в иерархии включает в себя не только объекты более низких уровней, но и их содержимое и функциональность. Чем выше объект в иерархии, тем больше его содержимое и шире функциональные возможности. Например, в Microsoft Excel объект Application содержит размер окна приложения и позволяет завершить работу приложения, объект Workbook содержит имя файла и формат рабочей книги и позволяет сохранить ее, а объект Worksheet содержит имя рабочего листа и позволяет удалить рабочий лист.

 

 
 

 

 

 

 

 

 

 

 

 

 

 

 


Рис.1. Структура объекта Excel.Application

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рис.2. Структура объекта Word.Application

Структура проекта.

 

Весь код, связанный с документом MS Office, размещается в проекте, автоматически сохраняемом вместе с документом. С помощью окна проекта в редакторе Visual Basic можно просматривать и изменять содержимое проектов для любых книг, документов, шаблонов или презентаций открытых или тех, на которые есть ссылки. Окно проекта можно масштабировать и стыковать с любой границей окна Visual Basic Editor.

В текстовом процессоре Word в окне проекта всегда показывается проект Normal, так как шаблон Normal (Обычный) доступен из всех документов Word.

В состав проекта могут входить пользовательские диалоговые окна (называемые в окне проекта формами), стандартные модули (в них содержатся процедуры общего назначения), модули классов (содержат определенные пользователем типы) и ссылки на другие документы.

 

 

 

 

 

Макросы и макрорекодер

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

Это значит также, что для любой операции, которую можно выполнить через пользовательский интерфейс, существует эквивалентный код на Visual Basic. Более того, существует встроенное средство – макрорекодер – позволяющее осуществить трансляцию операций в пользовательском интерфейсе в эквивалентный код на Visual Basic.

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

 

Основные понятия языка VBA

Если Вы хотите написать код, не связанный с каким-либо объектом или событием, создайте процедуру в стандартном модуле. Процедура это блок кода между операторами Sub и End Sub или Function и End Function. Процедуры могут быть личными (Private) доступными только в том модуле, где они определены, и общими (Public) – доступными во всех модулях проекта (по умолчанию). Упоминавшиеся нами макросы специфический термин, относящийся только к открытым (public) процедурам Sub без параметров.

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

 

Написание процедур для обработки событий

Некоторые объекты в приложениях Microsoft Office распознают предопределенный набор событий, инициируемых системой или пользователем. К числу таких событий относятся Open и Close для документов Word; Open, BeforePrint, BeforeSave и Beforeclose для рабочих книг Microsoft Excel; Calculate и SelectionChange для рабочих листов Microsoft Excel; Click, Initialize и Terminate для пользовательских диалоговых окон; Click, GotFocus и LostFocus для элементов управления на базе ActiveX.

Вы можете управлять тем, как приложение реагирует на определенное событие, написав код соответствующей процедуры обработки события. Такая процедура выполняется всякий раз, когда возникает данное событие. Например, если вы напишете процедуру для обработки события Open какого-нибудь документа Word, она будет автоматически выполняться при каждом открытии этого документа.

Процедура обработки события хранится там, где генерируется обрабатываемое ею событие. Например, процедура, выполняемая при открытии документа Word будет сохранена в объекте Document элемента ThisDocument.

Имя процедуры, предназначенной для обработки события, формируется из имени объекта, поддерживающего это событие (например, «Document», «Worksheet», «UserForm» или «CommandButton1»), знака подчеркивания (_) и имени события (скажем, «Open», «Calculate» или «Click»). Таким образом, процедура, запускаемая при открытии документа Word, называется Document_Оpen.

Свойства и методы объектов

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

В примере для Microsoft Excel, приведенном ниже, свойство Value объекта Range используется для просмотра значения в ячейке ВЗ на рабочем листе Sales из рабочей книги Current.xls.

Workbooks("Current.xls").Worksheets("Sales").Range("B3").Value = 3

Объекты Range и Selection

Во всех приложениях MS Office приходится иметь дело с последовательностями однотипных элементов. Каждой такой последовательности соответствуют два типа объектов: один определяет сам объект, другой – набор (коллекцию) этих элементов.

Однако мало иметь возможность работать с отдельным элементом или всей последовательностью – нужно уметь работать с произвольм ее подмножеством. Для этой цели придуман класс Rangeпроизвольный диапазон последовательности однотипных элементов. Использование объекта Range позволяет выполнять операции над произвольными подпоследовательностями. Напимер:

‘ выделение красным цветом данных в ячейках A1:F20 на активном листе рабочей книги Excel
Dim Rg As Range
Set Rg = ActiveWorksheet.Range(“A1:F20”)
Rg.Font.Color = vbRed
‘ выделение “жирным” шрифтом 3-го абзаца активного документа Word
ActiveDocument.Paragraphs(3).Range.Font.Bold = True

Так как объект Range просто задает некоторый диапазон, то можно одновременно работать с несколькими объектами Range.

Второй общеупотребительный объект, который присутствует также во всех приложениях MS Office, ‑ Selection. Он задает выделенную областьдокумента или рабочей книги. В отличие от Range, в приложении может существовать только один объект Selection.

Объекты Range и Selection взаимосвязаны. У объекта Range есть метод Select, который выделяет заданный диапазон, создавая объект Selection. Точно также объект Selection имеет метод Range, который позволяет получить диапазон, связанный с выделенной областью (в основном этот метод используется в Word). Например:

Dim Rg As Range, Rg2 As Range
Rg определяет несвязный диапазон
Set Rg = ActiveSheet.Range(“A1:C10”,”F5:R9”)
выделение диапазона соответствующего Rg
Rg.Select
` при этом создается объект
Selection
Dim C As Cells
`
перебор всех ячеек, попадающих в диапазон
For Each C In Rg.Cells
    
C.Value = Rnd()*20
Next C

 

Объекты-наборы

Некоторые объекты могут содержать в себе несколько однотипных объектов. Например, приложение MS Excel может содержать несколько рабочих книг – объектов Workbook. В свою очередь, рабочая книга может состоять их нескольких листов – объектов Worksheet. Такие обнотипные объекты объединяются в наборы (семейства, коллекции). Имя коллекции традиционно образуется добавлением буквы s к имени объекта – Workbooks, Worksheets.

Объект-набор можно использовать для доступа к отдельным объектам в наборе обычно посредством метода или свойства Item. Свойство или метод Item в большинстве наборов используется по умолчанию:

Documents.Item(1)
Documents(1)
Documents(“имя_первого_документа”)

Вы можете также создавать и добавлять к набору новые элементы обычно методом Add этого набора. Чтобы создать в Word новый документ на основе шаблона Normal (Обычный), напишите:

Documents.Add

Число объектов в наборе можно определить через свойство Count. В следующем примере Microsoft Excel выводит сообщение, если открыто более трех рабочих книг:

If Workbooks. Count > 3 Then MsgBox "Открыто больше чем 3 рабочие книги"

Наборы полезны и для других целей. Они, например, позволяют выполнять операции над всеми объектами набора. Для этого Вы перебираете элементы набора с помощью операторов For Each...Next или For...Next. В следующем примере распечатываются имена всех листов рабочей книги «MyBook.xls”:

Dim Sheet As Worksheet
For Each Sheet In Application.Workbooks(“MyBook.xls”).Worksheets
     Debug.Print Sheet.Name
Next Sheet