скачать Тема раздела: Создание приложений для MS Word Тема урока: Работа с содержимым текста
1. Объект Selection. Имея в наличии документ, можно как угодно манипулировать с его содержанием. В контексте объектно-ориентированного подхода практически все действия, которые выполняются над документом, выполняются над объектами, подчиненными объекту Document. Почти все, что делается с содержимым документа, предполагает наличие некоторой заданной позиции или части документа, над которой нужно произвести действие. Для этого используются объекты Selection и Range. Объект Selection представляет собой выделенный текст в документе. Этот объект всегда существует, даже если никакого текста не выделено, то объект Selection представляет текущее расположение точки вставки. Действия, которые можно производить с объектом Selection разбиваются на две категории:
Объект Selection имеет свойства, которые содержат информацию о выделенном тексте и методах, которыми производятся манипуляции с ним. (таблица) Поскольку объект Selection может представлять содержимое различных типов, всегда лучше всего сначала проверить, данные какого вида были выделены, прежде чем с ними что-то делать. В противном случае - сообщения об ошибках. Для поиска подобных сведений используйте свойство Туре объекта Selection . Можно использовать при подобных проверках константы: wdNoSelection Ничего не выбрано wdSе1еctionBlоск Вертикальный блок текста wdSelectionColurr Столбец в таблице wdSelection Frame Рамка wdSelectionlnlineShape Графическое изображение в тексте wdSelесtiоn IP Только точка вставки wdSelectionNormal Обычное выделение фрагмента текста wdSelectionRow Строка таблицы wdSelectionShape Изображение, не помещенное в текст Пример 1 Sub точка_вставки_в_конец_текста() If Selection.StoryType = wdMainTextStory Then Selection.Move Unit:=wdStory, Count:=1 End If End Sub Пример 2 Sub точка вставки в начало с текстом() If Selection.StoryType = wdMainTextStory Then Selection.Move Unit:=wdStory, Count:=-1 Selection.TypeText "лекция" Selection.InsertParagraphAfter End If End Sub Пример 3 Sub копирование абзаца в начало текста() Selection.Move Unit:=wdStory, Count:=-1 Selection.Expand Unit:=wdParagraph Selection.Copy Selection.Move wdStory, -1 Selection.Paste End Sub Пример 4 Sub разрыв страницы после 3 абзаца() Selection.Move Unit:=wdStory, Count:=-1 Selection.Move Unit:=wdParagraph, Count:=3 Selection.InsertBreak Type:=wdPageBreak ^ Если вы редактируете документ самостоятельно, вы должны поместить указатель мыши в нужное место либо выделить определенный фрагмент, прежде чем добавлять, удалять или форматировать текст. Однако в Word объекты Range избавляют от подобной необходимости. Объект Range определяет неразрывный блок текста в документе. Объекты Range полностью независимы от точки вставки или выделенного раздела, которые пользователь видит в окне документа. После создания объекта Range вы сможете манипулировать текстом, используя команды VBA, полные аналоги мощных команд редактирования Word, точно так же, как при использовании объектов S e l e c t i o n . Вы можете определить объекты Range в программном коде одним из двух следующих способов:
Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, а также таблица, отдельная ячейка таблицы, комментарий или нижний колонтитул (и это далеко не полный список) определяют диапазоны. Например, для определения объекта Range, соответствующего первому абзацу активного документа, вам следует использовать объектную ссылку следующего вида. ActiveDocument. Paragraphs (1) . Range Поскольку подобные стандартные диапазоны уже существуют в Word, вы можете использовать объектные ссылки на них напрямую, обходясь без каких-либо переменных. Это особенно хорошо подходит для тех ситуаций, когда вам необходим один конкретный диапазон для одной операции. Например, приведенная ниже инструкция копирует вторую таблицу в документе в буфер обмена, используя метод Сору объекта Range: ActiveDocument.Tables(2) .Range.Copy Если несколько инструкций используют один и тот же диапазон, вы можете использовать конструкцию With... для ускорения как ввода кода программы, так и ее выполнения. Если вы планируете использовать диапазон в нескольких инструкциях, которые не следуют одна за другой, вам придется присвоить диапазон переменной. Это позволит вам быстрее составить код программы, а также в конечном итоге ускорить ее выполнение. Объекты Selection также обладают свойством Range. Это значительно упрощает использование свойств и методов, принадлежащих объектам Range существующих выделенных областей. Приведенный ниже пример присваивает диапазон выделенной области переменной, после чего преобразует текст прописными буквами: Пример 5 Set deRange = Selection.Range Selection.Move unit := wdParagraph, Count := 3 deRange.Case = wdUpperCase End Sub Case – возвращает или устанавливает регистр текста в диапозоне. wdLowerCase – нижний регистр; wdUpperCase – верхний регистр; wdToggleCase – переключить регистр; wdTitleWord – первая буква слова в верхнем регистре. ^ Если существующие объекты не содержат текст, с которым вы хотите работать, создайте собственный объект Range. В любом открытом документе вы сможете определить столько объектов Range, сколько вам нужно. При этом используется метод Range документа, который требует указания начальной и конечной точек диапазона в терминах расположения символа в документе. Например: ActiveDocument.Range(Start:= 10, End:=2 0) Приведенное выше выражение представляет собой объектную ссылку на диапазон, который начинается с 11-го символа и заканчивается 20-м символом. Значение расположения символа на самом деле означает место слева от данного символа. Например, значение, равное 0, соответствует первому символу в документе, а значение 10 указывает на точку между 10-м и 31-м символами. Word считает все символы в документе, включая скрытые и непечатаемые знаки. Для создания диапазона, который станет всего лишь местом расположения и не содержит никакого текста, присвойте начальному и конечному значениям, определяющим диапазон, одно и то же число. Для включения в объект Range всего документа используйте метод Range этого документа без каких-либо аргументов или же используйте свойство Content документа. Для определения диапазона, используйте свойства Start или End объекта Selection , Range или Bookmark, чтобы определить месторасположение в документе интересующего вас символа. Пример 6 Sub в документе 10 символов() Dim R As Word.Range Set R = ActiveDocument.Range(Start:=10, End:=20) R.Bold = True End sub Bold – возвращает True или False, в зависимости от того, форматирован ли текст в диапазоне жирным шрифтом. Пример 7 Sub выделяет первое предложение каждого абзаца жирным шрифтом() Dim R As Word.Range Dim P As Word.Paragraph For Each P In Documents("VBA").Paragraphs If P.Range.Sentences.Count > 0 Then Set R = P.Range.Sentences(1) R.Bold = True End If Next P End Sub Пример 8 sub регистр текста в диапозоне () set derange = selection.range derange.case = wdlowercase end sub Пример 9 Sub подчeркивает_7_абзац() Dim R As Word.Range Set R = ActiveDocument.Paragraphs(7).Range R.Underline = wdUnderlineSingle End Sub Underline – возвращает или устанавливает подчеркивание текста в диапозоне. wdUnderlineSingle – подчеркивать сплошной линией. wdUnderlineNone – не подчеркивать; wdUnderlineDotDach – подчеркивать пунктиром; wdUnderlineWords – подчеркивать только слова. Italic - возвращает True или False, в зависимости от того, форматирован ли текст в диапазоне курсивом. ^ Объекты Range и Selection являются отправными точками для практически любых операций, которые вы сможете выполнять с текстом с помощью Word VBA. Некоторые из этих действий можно применять к документам в целом, но в общем случае вам необходим диапазон или выделенная область, прежде чем вносить изменения. У объектов Range и Selection достаточно много общего, но есть и несколько ключевых отличий. Оба объекта представляют непрерывные последовательности символов, над которыми можно выполнять различные операции. Оба объекта имеют много общих свойств и методов. Однако некоторые свойства и методы уникальны для выделенных областей, а другие — для диапазонов. Значительные различия состоят и в том, что объект Selection соответствует выделению в области окна: тексту, графическому изображению или любому другому объекту, в то время как объекты Range существуют независимо от выделенной области и всегда содержат текст. Используйте объект Selection в том случае, если ваша процедура зависит от пользователя, например, он должен указать текст, с которым будут проведены определенные действия, или в том случае, если вам необходимо показать пользователю, какой именно текст будет изменен. В других ситуациях намного лучше подходят объекты Range. Они обеспечивают большую скорость выполнения программ и меньше отпугивают пользователя: Word обновляет содержимое экрана при каждом изменении содержимого выделенной области, а при изменении диапазона содержимое экрана не обновляется. Кроме того, изменения диапазонов не отражаются на выделенных областях, созданных пользователем.
|