
10. Коллекция Documents
Коллекция Documents включает в себя открытые документы с их полезными методами и свойствами. Наряду с объектами Document, которые входят в коллекцию, рассматривается известный объект ActiveDocument,ActiveDocument имеет те же свойства и методы, что и любой Document - объект, однако, часто объектом ActiveDocument удобнее пользоваться. Так же нужно обратить внимание на объект ThisDocument. Он представляет собой тот документ, из которого запущен макрос.Для начала рассмотрим свойства и методы коллекции, а потом займемся объектом Document.Методы :Add - создаем новый документЭтот метод добавляет новый объект Document в коллекцию Documents - то есть создает новый документ. Его можно использовать так:Documents.AddЛистинг 10.1. Создаем новый документ (html, txt) При выполнении такого кода будет создан новый пустой документ на основе шаблона Normal.Метод Add может принимать несколько необязательных параметров. Полный вызов метода выглядит так:Documents.Add (Template, NewTemplate, DocumentType, Visible)Template (Шаблон) - отвечает за шаблон, который будет использован при создании файла. По умолчанию это Normal.dotm. NewTemplate (Новый шаблон) - если этот параметр установлен в True - файл будет обрабатываться как шаблон. По умолчанию установлен в False. DocumentType (Тип документа) - очень полезный параметр, который позволяет создавать документы различных типов. На тип документа указывает одна из констант, в частности, по умолчанию это wdNewBlankDocument - то есть пустой документ. Так же этот параметр может принимать значения wdNewEmailMessage (Почтовое сообщение), wdNewFrameset (Документ с рамками - такие используются при создании WEB-страниц), wdNewWebPage (WEB-страница). Visible (Видимость) - по умолчанию установлен в True - то есть создаваемый документ видим для пользователя. Если вы хотите, сначала сформировать новый документ, а уже потом показать его пользователю - установите это свойство в False, а после окончания формирования документа - воспользуйтесь свойством Visible созданного документа, чтобы отобразить его.Open - открываем документыМетод Open используется для открытия существующих файлов, возвращая объект типа Document. Файл, имя которого задано при вызове метода, открывается и добавляется в коллекцию Documents. Метод может принимать множество параметров, однако основной - это FileName, который и задает имя открываемого файла.Например, для открытия файла 1.docm, расположенного в корневом каталоги диска С, можно воспользоваться кодом:Documents.Open FileName:="C:\1.docm" Close - закрываем все документыМетод Close используется для закрытия всех открытых документов. Применяют его достаточно редко - удобнее закрывать каждый конкретный документ по отдельности. При вызове метода без параметров система задаст вопрос о сохранении документов, которые были измененыDocuments.Close Закрываем все документы (html, txt) Полный вызов метода выглядит так:Documents.Close(SaveChanges, OriginalFormat, RouteDocument) Среди параметров для нас наибольший интерес представляют первых два.SaveChanges (Сохранить изменения) отвечает за сохранение изменений. По умолчанию он установлен в wdPromptToSaveChanges (Вывести запрос о сохранении), так же он может быть установлен в wdDoNotSaveChanges (Не сохранять изменения) и wdSaveChanges (Сохранить изменения). Как видите, с помощью параметра wdSaveChanges можно организовать удобное и быстрое закрытие множества документов с сохранением изменений OriginalFormat (Формат) - отвечает за формат сохраняемого документа. Может принимать различные значения: wdOriginalDocumentFormat (Оригинальный формат документа), wdPromptUser (Запросить формат у пользователя), wdWordDocument (Документ Word).Вот как выглядит вызов метода Close, который сохраняет все открытые документы и закрывает их Documents.Close (wdSaveChanges) Закрываем все документы, предварительно сохранив (html, txt) Save - сохранение всех документовМетод Save сохраняет все документы коллекции. Если документ сохраняется впервые - будет выведено окно с запросом имени файла. приведен пример вызова метода.Documents.SaveСохраним все документы в коллекции (html, txt) Свойства коллекции DocumentsСреди свойств коллекции Documents нас будет интересовать лишь одно - Count. Это свойство позволяет узнать количество элементов в коллекции Documents, то есть - количество открытых документов. В листинге 10.9 мы выводим в окне сообщения количество открытых документов MsgBox ("Количество открытых документов: " & _ Documents.Count)Листинг 10.9. Сохраним все открытые документы (html, txt) Объект DocumentОбъект Document - это открытый документ. У него есть множество свойств и методов, которые активно используются при программной работе с документами. Здесь мы рассмотрим важнейшие из них.Методы объекта Document Activate - сделаем документ активнымПозволяет сделать документ активным. Например, это может понадобиться для редактирования документа.Например, код из листинга 10.10 активирует первый документ среди открытых документов.Dim obj_Doc As Document ,Set obj_Doc = Documents.Item(1) ,obj_Doc.Activate Листинг 10.10. Активируем первый из открытых документов (html, txt) Close - закрыть документМетод Close закрывает документ. Например, код из листинга 10.11 позволяет закрыть документ, из которого он запущен.ThisDocument.CloseЛистинг 10.11. Закрываем документ, из которого запущен макрос (html, txt) Метод можно вызывать с параметрами. В частности, полезен параметр SaveChanges, предназначенный для настройки автоматического сохранения документа. Если присвоить ему значение wdSaveChanges - документ будет сохранен при закрытии. Например, код из листинга 10.12 по очереди закрывает каждый из открытых документов. Dim obj_Doc As Document , For Each obj_Doc In Documents , obj_Doc.Close SaveChanges:=wdSaveChanges , Next Листинг 10.12. Закрываем каждый из открытых документов (html, txt) При закрытии документов, которые были открыты и изменены, система выведет запрос о сохранении изменений. FitToPages - уменьшить размер текста на одну страницуЭтот метод уменьшает размер документа на одну страницу - его удобно использовать, чтобы избавиться от страницы документа, на которой есть лишь несколько строчек. Save - сохранение файловСохраняет документ. Обычно применяют без параметров, хотя полезен может быть параметр NoPrompt. Установленный в True, предписывает MS Word сохранять файл без дополнительных вопросов пользователю.Обычно для сохранения файлов с определенными параметрами используют метод SaveAs. Свойства объекта Document Application - приложение документа Это свойство позволяет получить объект приложения документа. Вы можете подумать, что это - ошибка, что, наоборот, объект документа содержится в объекте приложения. Однако, ошибки нет. Это свойство позволяет обращаться к приложению тогда, когда у нас нет ссылки на него, а есть лишь ссылка на документ. Например, код в листинге 10.15 позволяет скрыть окно Microsoft Word вместе с окном документа, используя свойство Visible объекта Application. ThisDocument.Application.Visible = FalseЛистинг 10.15. Скрытие окна приложения (html, txt) FullName, Name, Path - пути и именаСвойство FullName возвращает строку, содержащую полное имя документа - то есть полный путь к документу и его имя.Листинг 10.27. выводит полное имя документа в окне сообщения. (html, txt) MsgBox (ActiveDocument.FullName)Листинг 10.27. Выводим полное имя документа (html, txt) Свойство Name возвращает имя документа без пути, а Path - путь без имени. Tables - работа с таблицамиСвойство возвращает коллекцию Tables (Таблицы), которая содержит объекты Table - таблицы, которые имеются в документе. Работа с таблицами похожа на работу с другими объектами документов.Например, чтобы добавить в документ новую таблицу, нужно воспользоваться методом Add коллекции Tables. Рассмотрим пример (листинг 10.28.). Добавим в позицию курсора таблицу, состоящую из 3-х строк и 4-х столбцов.
Dim obj_Table As Table
Set obj_Table = _,ActiveDocument.Tables.Add(Range:=Selection.Range, _,NumRows:=3, NumColumns:=4), With obj_Table, .Borders.OutsideLineStyle = wdLineStyleTriple
.Borders.InsideLineStyle = wdLineStyleSingle , End With Листинг 10.28. Добавляем в документ новую таблицу (html, txt) Здесь мы сначала объявляем объектную переменную типа Table - для хранения ссылки на таблицу. Далее - при помощи метода Add коллекции Tables добавляем в документ новую таблицу, состоящую из 3-х строк и 4-х столбцов. Обратите внимание на параметр Range метода Add. Он задает позицию в документе, куда будет вставлена новая таблица. Здесь мы приравняли ему такое значение: Selection.Range. Ниже мы будем говорить и об объекте Selection, и о Range, однако отметим, что выражение Selection.Range можно передать обычным языком как "Текущее выделение". Значит, таблица будет вставлена в выделенную область документа, либо, если область документа явно не выделена - туда, где в момент запуска макроса установлен курсор.Добавленная таблица не очень хорошо заметна в документе - она состоит из невидимых линий. Поэтому мы настраиваем отображение линий таблицы с помощью блока With - End With для переменной obj_Table. Воспользуемся коллекцией Borders объекта Table - она позволяет работать с границами таблицы. Параметр OutsideLineStyle позволяет задавать тип линий внешней границы таблицы. Здесь мы установили тип линии wdLineStyleTriple - это тройная линия. Аналогично, с помощью параметра InsideLineStyle мы сделали внутренние линии таблицы одинарными ( wdLineStyleSingle ).
17. Практика MS Excel Создадим программу для обмена значений - произведем обмен значениями двух переменных без использования третьей.Предположим, что имеются 2 переменные (А и В), содержащие числа. Для обмена значениями этих переменных достаточно произвести следующие действия: Сложить А и В и результат записать в А Вычесть из А переменную В и записать результат в В. Вычесть из А переменную В и записать результат в А Для решения задачи будем считать, что число A записано в ячейку B2, число В - в ячейку C2. Подпишем соответствующим образом эти ячейки и разместим на рабочем листе кнопку с именем cmd_Change и надписью Обменять А и B. Программный код для решения задачи, размещенный в обработчике события Click для кнопки cmd_Change:Сохраняем сумму ячеек в B2ActiveSheet.Range("B2") = _ActiveSheet.Range("B2") + ActiveSheet.Range("C2" Разность сохраняем в С2 ActiveSheet.Range("C2") = _ ActiveSheet.Range("B2") - _ ActiveSheet.Range("C2" 'И еще раз разность в B ActiveSheet.Range("B2") = _ ActiveSheet.Range("B2") - ActiveSheet.Range("C2")Также для этих целей можно использовать функцию Cells(Строка,Столбец)Сохраняем сумму ячеек в B2 Cells(2, 2).Value = Cells(2, 3).Value + Cells(2, 2).Value Разность сохраняем в С2 Cells(2, 3).Value = Cells(2, 2).Value - Cells(2, 3).Value И еще раз разность в B2 Cells(2, 2).Value = Cells(2, 2).Value - Cells(2, 3).Value