Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно
Лекция 10:

Работа с документами

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

10.6. Свойства объекта Document

10.6.1. Application - приложение документа

Это свойство позволяет получить объект приложения документа. Вы можете подумать, что это - ошибка, что, наоборот, объект документа содержится в объекте приложения. Однако, ошибки нет. Это свойство позволяет обращаться к приложению тогда, когда у нас нет ссылки на него, а есть лишь ссылка на документ. Например, код в листинге 10.15 позволяет скрыть окно Microsoft Word вместе с окном документа, используя свойство Visible объекта Application.

ThisDocument.Application.Visible = False
Листинг 10.15. Скрытие окна приложения

10.6.2. AttachedTemplate - присоединенный шаблон

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

Например, такой листинг 10.16. позволяет вывести имя присоединенного шаблона и путь к нему:

Dim obj_Templ As Template
    Set obj_Templ = ActiveDocument.AttachedTemplate
    MsgBox ("Имя шаблона: " & obj_Templ.Name & _
    ", путь к шаблону: " & obj_Templ.Path)
Листинг 10.16. Имя присоединенного шаблона и путь к нему

Здесь мы сначала объявили новую переменную типа Template, потом присвоили ей ссылку на шаблон, присоединенный к активному документу, а потом воспользовались свойствами Name и Path шаблона, чтобы вывести информацию о нем.

Листинг 10.17 позволяет присоединить к документу шаблон MyTemplate.dotm, расположенный на диске C.

ActiveDocument.AttachedTemplate = "C:\MyTemplate.dotm"
Листинг 10.17. Присоединяем шаблон к документу

10.6.3. Bookmarks - закладки

Возвращает коллекцию Bookmarks, которая содержит все закладки в документе. Закладки позволяют удобно организовать навигацию по документу, особенно удобно с их помощью автоматизировать создание новых документов на основе шаблонов. Подробнее о закладках мы поговорим ниже.

10.6.4. Characters, Words, Sentences, Paragraphs и другие

10-04-Символы.docm - пример к п. 10.6.4.

Все эти свойства возвращают объекты, предназначенные для работы с различными частями документа.

  • Characters (Символы) - возвращает одноименную коллекцию, каждый объект которой представляет собой отдельный символ в документе. Каждый объект коллекции Characters представляет собой диапазон ( Range ), содержащий один символ
  • Words (Слова) - то же самое, но уже для слов.
  • Sentences (Предложения) - то же самое для предложений.
  • Paragraphs (Абзацы) - коллекция абзацев документа.
  • Помимо этих коллекций документ может содержать и другие подобные. В частности, следующие:
  • Hyperlinks - гиперссылки. При добавлении гиперссылки обратите внимание на то, что метод Add использует объект привязки гиперссылки - Anchor (Якорь) - им может быть, например, графический или текстовый элемент.
  • Indexes - индексы.
  • InlineShapes, Shapes - фигуры, графические элементы
  • Lists - списки.
  • OMaths - формулы.
  • Sections - разделы.
  • Tables - таблицы.

Работа со всеми этими коллекциями схожа. Давайте рассмотрим ее на примере коллекции Characters, которую, как уже было сказано, можно использовать для работы с отдельными символами документа. Работу с некоторыми другими коллекциями мы рассмотрим ниже.

Листинг 10.18 позволяет вывести в окне сообщения информацию о количестве символов в документе (включая пробелы).

MsgBox ("Количество символов: " & _
    ActiveDocument.Characters.Count)
Листинг 10.18. Выводим количество символов в документе

С помощью метода Item коллекции, мы можем получить доступ к каждому символу документа. Например, с помощью этого метода можно проводить различные статистические подсчеты. листинг 10.19. позволяет узнать, сколько раз в документе использована буква "ф" в верхнем и нижнем регистре.

Dim var_Fcount
    var_Fcount = 0
    For i = 1 To ActiveDocument.Characters.Count
        If ActiveDocument.Characters.Item(i) = "ф" Or _
        ActiveDocument.Characters.Item(i) = "Ф" Then _
        var_Fcount = var_Fcount + 1
    Next i
    MsgBox ("Количество букв 'Ф' в документе: " & _
    var_Fcount)
Листинг 10.19. Подсчитываем количество вхождений буквы "ф"

Листинг 10.20 позволяет заменить букву "ё" в верхнем и нижнем регистре на "е".

Dim obj_D As Document
    Set obj_D = ActiveDocument
    For i = 1 To obj_D.Characters.Count
        If obj_D.Characters.Item(i) = "ё" _
        Then obj_D.Characters.Item(i) = "е"
        If obj_D.Characters.Item(i) = "Ё" _
        Then obj_D.Characters.Item(i) = "Е"
    Next i
Листинг 10.20. Замена буквы е на е

В листинге 10.21 вы можете найти программу, которая "переворачивает" весь текст в документе - меняет последний символ с первым, второй - с предпоследним и так далее.

Dim obj_D As Document
    Dim str_Chr As String
    Dim var_Count As Variant
    Set obj_D = Documents.Add
    obj_D.Range.Text = "Привет!"
    var_Count = obj_D.Characters.Count
    For i = 1 To var_Count \ 2
        str_Chr = obj_D.Characters.Item(i)
        obj_D.Characters.Item(i) = _
        obj_D.Characters.Item(var_Count - i + 1)
        obj_D.Characters.Item(var_Count - i + 1) = _
        str_Chr
    Next i
Листинг 10.21. Переворачивание текста в документе

Здесь мы сначала заводим переменную для хранения ссылки на активный документ, далее - строковую переменную для временного хранения одного символа и переменную типа Variant, в которой будем хранить количество символов в документе.

Далее создаем новый документ и добавляем в него текст "Привет" с помощью свойства Text объекта Range. Именно этот текст мы и будем переворачивать.

Итак, мы используем цикл длительностью, равной количеству символов в документе, деленному на 2, причем обратите внимание на оператор деления. Это - целочисленное деление, то есть для четного числа символов в обмене будут участвовать все символы, а для нечетного - один, "центральный" символ останется на своем месте.

В цикле мы сначала присваиваем i -й символ переменной, потом присваиваем i -му символу противоположный ему символ, а в конце - противоположному символу - символ, хранящийся в переменной. Обратите внимание на алгоритм расчета противоположного символа. Var_Count - i + 1 дает нам последний символ при i = 1, то есть - для первого символа и т.д. В этом несложно убедиться путем расчетов. Например, если в тексте 10 символов, то для обмена с первым символом ( i = 1) мы получим последний символ (10-1+1=10), для второго ( i =2) - девятый (10-2+1=9) и т.д.

10.6.5. Content - "чистый" текст документа

10-05-Content.docm - пример к п. 10.6.5.

Свойство документа Content возвращает объект Range - текст документа без сносок, колонтитулов и т.д.

В листинге 10.22 вы можете найти пример использования свойства Content для настройки шрифта документа.

Dim obj_C As Range
    Set obj_C = ActiveDocument.Content
    With obj_C.Font
        .Name = "Arial"
        .Size = 12
        .Spacing = 1.5
    End With
Листинг 10.22. Настраиваем шрифт текста документа

В этом коде мы объявили объектную переменную типа Range, связали с ней объект Range, возвращаемый свойством Content активного документа, после чего, воспользовавшись свойством Font объекта Range, установили гарнитуру ( Name ) шрифта Arial, размер ( Size ) - 12 пунктов и расстояние между символами в 1.5 пункта.

Чтобы записать текст документа в строковую переменную, можно воспользоваться кодом листинга 10.23.

Dim str_Text As String
    str_Text = ActiveDocument.Content.Text
Листинг 10.23. Записываем текст документа в переменную

Cвойство Text объекта Range возвращает текст объекта. Записав текст в переменную, мы сможем работать с ней средствами VBA.

10.6.6. Endnotes, Footnotes - сноски

10-06-Сноски.docm - пример к п. 10.6.6.

Эти свойства возвращают, соответственно, коллекцию Endnotes и Footnotes. В коллекции Endnotes находятся объекты Endnote - то есть концевые ссылки - ссылки, которые расположены в конце документа. В коллекции Footnotes расположены объекты Footnote - обычные ссылки, которые расположены в конце страницы.

Давайте рассмотрим работу с этими объектами на примере Footnotes. Работа с Endnotes аналогична работе с Footnotes.

Добавить в документ новую ссылку можно с помощью метода Add коллекции Footnotes.

Полный вызов метода Add выглядит так:

  • ActiveDocument.Footnotes.Add(Range, Reference, Text)
  • Range - область текста, для которой вставляется сноска.
  • Reference - определяет символ сноски. По умолчанию используется автоматическая нумерация сносок.
  • Text - текст сноски.

В листинге 10.24. вы можете видеть код, добавляющий сноску для выделенного фрагмента текста (как правило, выделяют слово):

ActiveDocument.Footnotes.Add _ 
    Range:=Selection.Range, _
    Text:="Новая сноска!"
Листинг 10.24. Добавление сноски к выделенному фрагменту документа

Свойство Count коллекции Footnotes позволяет узнать количество ссылок в документе.

Чтобы обращаться к отдельным сноскам (объектам Footnote ), можно пользоваться либо их индексами в коллекции Footnotes, либо - оператором For Each - Next.

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

Свойство Reference возвращает объект типа Range, который представляет собой область, занимаемую значком-ссылкой на сноску в теле документа.

В листинге 10.25 приведен пример форматирования сносок и ссылок на них.

Dim obj_D As Document
    Dim obj_Footnote As Footnote
    Set obj_D = ActiveDocument
    'Форматируем сноски
    For Each obj_Footnote In obj_D.Footnotes
        obj_Footnote.Range.Font.Size = 11
    Next
    'Форматируем знаки-ссылки на сноски
    For i = 1 To obj_D.Footnotes.Count
        obj_D.Footnotes.Item(i).Reference _
        .Font.Color = wdColorRed
    Next i
Листинг 10.25. 10.25. Форматирование сносок и ссылок на них

Сначала мы, с помощью конструкции For-Each перебираем все сноски и устанавливаем размер шрифта для каждой из них равным 11 пунктов.

Далее, с помощью цикла For-Next мы обходим все ссылки на сноски в тексте и делаем цвет их шрифта красным.

Чтобы удалить сноску, можно воспользоваться методом Delete объекта Footnote.

Узнать номер сноски в коллекции Footnotes можно, используя свойство Index. Например, код листинга 10.26 позволяет вывести поочередно все сноски с их номерами в окне сообщения.

Dim obj_D As Document
    Dim obj_Footnote As Footnote
    Set obj_D = ActiveDocument
    'Выводим информацию о сносках
    For Each obj_Footnote In obj_D.Footnotes
      MsgBox ("Номер сноски: " & obj_Footnote.Index & _
      vbCrLf & "Текст сноски: " & obj_Footnote.Range.Text)
    Next
Листинг 10.26. 10.26. Выводим все сноски и их номера

Константа vbCrLf заменяет собой знак перевода строки, в итоге при выполнении этого кода для каждой сноски будет выведено такое окно (рис. 10.2.).

Информация о сносках

Рис. 10.2. Информация о сносках
< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Евгений Ушаков
Евгений Ушаков
О стоимости курса
Александр Новиков
Александр Новиков
Справочник по объектам VBA
Анатолий Федоров
Анатолий Федоров
Россия, Москва
Михаил Алексеев
Михаил Алексеев
Россия