Опубликован: 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 >
Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)