Выше нам уже встречался и Selection, и Range. Здесь пришло время поговорить о них подробнее, обсудить особенности их использования.
Напомню, что Application.Selection представляет собой выделенный участок документа или, если ничего не выделено, позицию курсора. Именно этим объектом пользуется
У Selection есть два основных применения. Первое —
Выделения можно создавать и программно, но эту методику практически никогда не используют на практике. Например, код листинга 11.1 выделяет седьмое слово в документе и форматирует его курсивом:
ActiveDocument.Words.Item(7).Select Selection.Font.Italic = True
Предположим, мы используем такую конструкцию в
Selection обычно используют без объявления
Selection.Text = "Привет"
Минус использования Selection при автоматической обработке текста зависит от того, что он слишком чувствителен к действиям пользователя. Например, мы напишем программу, которая, имитируя выделение фрагментов текста с клавиатуры, обрабатывает текст. Если во время обработки текста пользователь вмешается, случайно кликнув мышью в документе, работа такой программы будет нарушена.
Рассмотрим основные свойства и методы Selection.
Этот метод очищает форматирование выделенного участка документа.
Методы Copy и Cut, соответственно, копируют и вырезают выделенный фрагмент в буфер обмена, а метод Paste — вставляет материалы из буфера в область выделения.
Метод Delete удаляет выделенный фрагмент
Как следует из их названий, методы InsertAfter и InsertBefore позволяют вставить текст после или до выделения. Существуют и другие методы, название которых начинается с Insert. Они позволяют вставлять множество других объектов в выделенную область. Например, InsertBreak вставляет разрыв страницы, колонки или раздела, InsertCells вставляет в выделенную таблицу ячейки и т.д.
Удаляет один символ, предшествующий позиции курсора, имитируя нажатие клавиши Backspace на клавиатуре.
Имитирует нажатие клавиши Enter на клавиатуре — вставляет в текст знак перевода строки.
Вводит в документ текст. У метода есть лишь один параметр — Text. Он должен содержать тот текст, который должен быть выведен в документ. Ниже мы рассмотрим примеры, где используется этот метод.
Позволяет выделить весь документ. Пожалуй, это единственный удобный метод программного управления выделением.
Это свойство возвращает коллекцию , которая содержит все закладки, имеющиеся в выделении. Существуют подобные свойства для символов ( Characters ), таблиц ( Tables ) и многих других коллекций объектов. Работа с ними ни чем не отличается от работы с аналогичными коллекциями, входящими в Document.
Эти свойства позволяют узнать и модифицировать, соответственно, конечную ( End ) и начальную ( Start ) позиции выделения.
Это свойство позволяет узнавать и настраивать параметры шрифта выделенного фрагмента. Например, код, приведенный в листинге 11.3 форматирует текст. Пояснения к примеру приведены в комментариях.
'Полужирный
Selection.Font.Bold = wdToggle
'Курсивный
Selection.Font.Italic = wdToggle
'Подчеркнутый
Selection.Font.Underline = wdUnderlineSingle
'Гарнитура Arial Narrow
Selection.Font.Name = "Arial Narrow"
'Размер шрифта - 14
Selection.Font.Size = 14
'Цвет шрифта - красный - из
'перечисления wdColorR
Selection.Font.Color = wdColorRed
Позволяет узнать подробности о выделении. Это свойство может принимать параметр типа wdInformation, который и определяет, что именно возвратит свойство.
Это свойство позволяет получить Range, соответствующий выделению.
Например, этим свойством можно воспользоваться так, как показано в листинге 11.4.
Dim obj_Range As Range Set obj_Range = Selection.Range
Это свойство позволяет получить текст, содержащийся в выделении, и изменить его.
11-01-Selection.docm— пример к п. 11.4.
Рассмотрим пример использования вышеперечисленных свойств и методов (а заодно – и некоторых других), решив небольшую задачу.
Создать новый документ, и добавить в него текст, который был выделен в текущем документе. Каждое слово этого текста надо напечатать отдельно, с новой строки. Каждое слово должно предваряться таким текстом: "Слово №x:", где x — номер слова в выделенном тексте. После вывода слов нужно подсчитать количество слов и количество букв в этих словах и вывести строку "Всего обработано "x" слов, состоящих из "xx" букв". Готовый документ сохранить на диске C:\, задав в качестве его имени такую структуру:
"Имя_исходного_документа"+ "текущая дата"+ "обработано".docm
После того, как слова будут выведены, нужно заключить выделенный участок исходного документа в скобки, отметить синим цветом шрифта и выделить первый символ текущего выделения.
Создадим новый макрос ( Copy_To_File ), воспользовавшись окном Макросы, которое можно открыть с вкладки Вид.
Добавим в макрос код из листинга 11.5.
'Переменая для хранения ссылки на новый документ
Dim obj_NewDoc As Document
'Для ссылки на исходный документ
Dim obj_OurDoc As Document
'Динамический массив для хранения слов
Dim WordsArray() As String
'Переменная для хранения количества слов
Dim WordsCount
'Переменная для формирования строк,
'которые выводятся в новый документ
Dim OutString
'Переменная для хранения количества
'символов в обработанных словах
Dim LettersCount
'В этой переменной будем создавать
'имя файла
Dim NewDocName
'Запишем ссылку на активный документ
'Для того, чтобы вернуться в него
'после работы с новым документом
Set obj_OurDoc = ActiveDocument
WordsCount = Selection.Words.Count
LettersCount = Selection.Characters.Count
ReDim WordsArray(WordsCount)
'Переносим слова из выделения
'в массив для удобства работы с ними
For i = 1 To WordsCount
WordsArray(i) = Selection.Words.Item(i)
Next i
'Создадим новый документ
Set obj_NewDoc = Documents.Add
'И сделаем его активным
obj_NewDoc.Activate
'Теперь объект Selection относится к активному
'документу и мы начинаем вводить в него данные
Selection.TypeText ("Список выделенных слов")
Selection.TypeParagraph
For i = 1 To WordsCount
OutString = "Слово №" + Str(i) + ": " + _
WordsArray(i)
Selection.TypeText (OutString)
Selection.TypeParagraph
Next i
Selection.TypeText ("Всего обработано " + _
Str(WordsCount) + _
" слов(а), в которых содержится " + _
Str(LettersCount) + " символа(ов)")
'Создаем имя нового документа
NewDocName = obj_OurDoc.Name + " " + _
Str(Date) + " Обработано.docx"
'Установим корневой каталог диска C:
'для сохранения нового файла по умолчанию
ChangeFileOpenDirectory "C:\"
'Используем метод SaveAs для
'автоматического сохранения
'документа
ActiveDocument.SaveAs _
FileName:=NewDocName, _
FileFormat:=wdFormatDocumentDefault
'Закрываем активный документ
ActiveDocument.Close
'Активируем документ, в котором мы выделяли
'слова
obj_OurDoc.Activate
'Отмечаем обработанный участок
'скобками и выделением синим цветом
Selection.InsertAfter (") ")
Selection.InsertBefore (" (")
Selection.Font.Color = wdColorBlue
'Выделяем первый символ текущего выделения и
'выводим сообщение о том, что операция
'выполнена
Selection.Characters(1).Select
MsgBox ("Выполнено!")
Как видите, в этом примере мы используем исключительно Selection для работы с текстом документов. Обратите внимание на то, что мы нигде специально не храним информацию о выделенной области первого документа. Создав второй документ, мы просто делаем его активным и работаем с ним, используя его Selection. В это время выделение сохраняется в исходном документе. Однако, если в это время пользователь случайно или умышленно изменит выделение текущего документа — программа будет работать неправильно — она выделит не тот фрагмент, который был передан ей для обработки, а совсем другой.
Объект Range имеет некоторые преимущества перед Selection. В частности, при работе с Range нет необходимости выделять текст или перемещать по тексту курсор.
В документе может быть сколько угодно Range, в то время, как Selection может быть лишь один. Объект Range задается первым и последним символом.
Особенность работы с Range заключается в том, что этот объект может быть создан лишь программно. Получить Range для различных частей документа можно разными способами.
Можно преобразовать в Range выделение и больше не зависеть от действий пользователя — с помощью свойства Range Selection. В п.6.6.2.5 мы рассматривали пример такого перехода.
Объект Range, в свою очередь, может быть преобразован в выделение — с помощью метода Select. Поэтому мы можем легко переходить от Range к Selection и наоборот.
Можно задать Range напрямую — указав диапазон. Например, следующий код позволяет получить диапазон активного документа от 10 до 1500-го символа (листинг 11.6.)
Dim obj_Range As Range
Set obj_Range = _
ActiveDocument.Range(10, 1500)
Минус этого метода очевиден: чтобы программно работать с определенным участком документа, нужно знать его "координаты" — даже если предварительно вычислить их, любое изменение документа вызовет необходимость пересчета.
Можно получить Range для любого объекта документа, обратившись к соответствующему свойству объекта типа Character, Word и т.д. Например, следующий код (листинг 11.7.) записывает в Range для 5-го слова активного документа.
Dim obj_Range As Range
Set obj_Range = _
ActiveDocument.Words(5).Range
Очень часто используется разновидность этого метода, связанная со свойством Range объекта Bookmark — закладки. На практике это — один из самых удобных способов
Если вы ориентируетесь в методах и свойствах Selection — это значит, что вы сможете работать и с Range. Между этими объектами очень много общего. Здесь мы отметим лишь уже упомянутый метод Select Range — он позволяет выделить диапазон, соответствующий ему, а так же свойство Text, которое предназначено для модификации текста, который содержится в Range. Практику работы с Range мы рассмотрим в следующем разделе, когда будем говорить о закладках.
11-02-Закладки и шаблоны.dotm — пример к п. 11.6.
Коллекция содержит закладки. Эта коллекция может использоваться совместно с объектами Document, Selection и Range. Причем, когда речь идет о коллекции Document., мы можем работать с закладками в масштабах всего документа, коллекция Selection. содержит закладки в пределах выделения, а Range. — в пределах диапазона.
Закладки, добавленные в документы, хранятся там постоянно. Объекты имеют очень мало свойств и методов. Главная задача закладки — это точно указать место в документе, а все остальное — это уже забота либо Selection, либо — Range. Для получения Range из закладки достаточно воспользоваться ее свойством Range.
С помощью закладок очень удобно автоматизировать создание документа. Зная имя или позицию нужной закладки в коллекции, можно обращаться к ней, вставляя определенный текст. В частности, использование закладок для автоматизации создания документа может предусматривать следующую схему действий.
Давайте рассмотрим пример, который иллюстрирует вышеописанные шаги. Мы будем создавать
Чтобы создать ый Александр Александрович! Приглашаем вас на собрание, которое состоится 17.05.08. Администрация" (рис. 11.1.).
(рис 11.1) Подготовка текста шаблонаВ этом тексте выделены места, которые могут меняться. Давайте создадим таблицу, содержащую информацию об этих местах документа (табл. 11.1.).
| Изменяемый элемент | Описание | Имя и номер закладки |
|---|---|---|
| ый | Окончание, определяющее лицо или лица, которым адресовано послание. Возможные варианты: "ый" - для мужчины, "ая" - для женщины, "ые" - для группы лиц | bm_Peoples, №1 |
| Александр Александрович | Имя приглашенного | bm_Name, №2 |
| 17.05.08 | Дата | bm_Date, №3 |
Чтобы назначить элементу документа закладку, нужно выделить этот элемент (например, слово или часть слова), после чего перейти на вкладку Вставка, нажать там кнопку Связи и в появившемся меню выбрать пункт Закладки. Появится окно, в котором нужно задать имя закладки и нажать на кнопку Добавить для добавления закладки в документ (рис. 11.2.).
(рис 11.2) Добавление закладки в документПосле того, как закладки добавлены, оснастим наш New
В нашем случае это должен код (листинг 11.8.), который запрашивает данные у пользователя. При необходимости можно видоизменить программу таким образом, чтобы она брала данные из специально подготовленного файла, из базы данных, можно создать форму для ввода всех значений по каждому из пользователей и, запустив ее, создать необходимое количество документов, используя
Private Sub Document_New()
Dim obj_NewDoc As Document
Dim obj_Range As Range
Set obj_NewDoc = Application.Documents.Item(1)
Set obj_Range = _
obj_NewDoc.Bookmarks("bm_Peoples").Range
obj_Range.Text = _
InputBox("Введите окончание обращения: -ый, -ая, -ые")
Set obj_Range = _
obj_NewDoc.Bookmarks("bm_Name").Range
obj_Range.Text = _
InputBox("Введите имена приглашенных")
Set obj_Range = _
obj_NewDoc.Bookmarks("bm_Date").Range
obj_Range.Text = _
InputBox("Введите дату собрания")
End Sub
Сначала мы объявляем пару
В первую очередь получаем ссылку на созданный документ. Он будет первым в коллекции Application.Documents.
Далее — записываем в obj_Range диапазон, которому соответствует закладка с именем bm_Peoples — то есть та самая, которая должна хранить окончание обращения.
Следующий шаг — воспользоваться свойством Text Range и предложить пользователю ввести окончание для обращения.
Далее процесс повторяется — ссылка на диапазон очередной закладки записывается в переменную, после чего этот диапазон модифицируется путем ввода данных.
Здесь мы рассмотрели лишь общую схему работы с закладками. На практике неудобно будет вводить большое количество информации в окна запросов. Поэтому данный пример можно развивать в нескольких направлениях.
11-03-Автоматические макросы.docm — пример к п. 11.7.
Работая с макросами Microsoft Word, следует знать о том, что существует несколько имен, зарезервированных для макросов, которые могут выполняться автоматически. Имена и события, при возникновении которых запускаются эти макросы, приведены в табл. 11.2.
| Имя макроса | Условия выполнения |
|---|---|
AutoExec |
Старт Microsoft Word или загрузка глобального шаблона. Этот макрос будет работать лишь из Normal.dotm |
AutoNew |
Создание нового документа |
AutoOpen |
Открытие существующего документа |
AutoClose |
Закрытие документа |
AutoExit |
Выход из Microsoft Word или выгрузка глобального шаблона |
Давайте добавим к документу макрос AutoClose — он будет выполняться каждый раз при закрытии документа. Для этого с помощью панели Вид откроем окно Макрос, в поле ввода имени макроса введем AutoClose и нажмем на кнопку Создать. Появится окно редактора Visual Basic, содержащее новый модуль с макросом, имеющим имя AutoClose. Добавим в код макроса вызов окна сообщения, выводящего надпись "До свидания!". Ведь макрос AutoClose будет выполняться при выходе из документа, логично будет попрощаться с пользователем после того, как тот нажал на кнопку закрытия документа.
Вы могли заметить, что эти макросы очень похожи на события объекта Document — их можно использовать в различных целях, когда нужна предварительная подготовка документа после его создания или проведение каких-либо работ сразу перед закрытием. Будучи добавленными в Normal.dotm, такие макросы могут послужить целям автоматизации работы в MS Office.
В этой лекции мы познакомились с приемами автоматического редактирования и создания документов MS Word с использованием Range и Selection. Так же мы рассмотрели пример автоматического создания документа на основе
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.