КОНСПЕКТ ОБЗОРНОЙ ЛЕКЦИИ
Для студентов специальности
Т1002 «Программное обеспечение информационных технологий»
(А.М.Кадан,
к.т.н., доцент)
Вопрос № 37.
Автоматизация обработки офисных документов.
Концепция активных документов 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 содержит
имя рабочего листа и позволяет удалить рабочий лист.
Структура проекта.
Весь код,
связанный с документом 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