Метод range word vba
Объекты, задающие программный проект, являются общими для всех документов Office 2000, в том числе и документа Word. Этой важной теме - программной работе с такими объектами посвящена лекция 4
Текст и объекты Range и Selection
Основной частью документа Word является, конечно, текст этого документа. Уже было сказано, как структурирован текст документа, рассмотрены коллекции - Characters , Words , Sentences , Paragraphs , которые позволяют работать с символами, словами, предложениями и абзацами текста. Говорил я также и о том, что только этими коллекциями не обойтись, и необходим общий класс объектов, позволяющий задать произвольную область текста. Таковыми являются два важных класса Range и Selection . Объекты этих классов широко используются при работе с текстом. Документы, поддокументы, разделы, все вышеупомянутые коллекции от Characters до Words имеют метод или свойство Range , возвращающие в качестве результат объект Range . Каждый объект Range задает область определения некоторого объекта, включая текст и все объекты, связанные с этим текстом - комментарии, ссылки и прочее. Так, если некоторый объект вызвал метод Range , то возвращаемый объект Range будет содержать область определения объекта, вызвавшего метод.
Объект Selection представляет выделенную область. Поскольку в каждом окне может быть только одна выделенная область, то одновременно может существовать лишь несколько объектов Selection по одному на каждое существующее окно или подокно. Заметим также, что, объект Selection всегда существует в окне, даже если и не сделано явного выделения некоторой области, в последнем случае объект Selection задает точку вставки, определенную позицией курсора.
Объект Document имеет метод Range , возвращающий объект Range , и метод Select , создающий объект Selection . Метод Range - это функция, возвращающая в качестве результата объект Range ; метод Select - это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Заметьте существенную разницу между методами Range и Selection . В первом случае возвращается сам объект и поэтому можно запомнить возвращаемый объект и в программе одновременно работать с несколькими такими объектами. В случае вызова метода Selection объект не возвращается, следовательно, запомнить его нельзя, что и гарантирует уникальность объекта Selection .
Объект Range имеет метод Select , выделяющий область объекта Range , и определяющий, тем самым, новый объект Selection . Симметрично, объект Selection имеет свойство Range , возвращающее объект Range , соответствующий выделенной области.
Объекты Range и Selection столь же многообразны по своей структуре, как и объект Document . И даже большинство свойств у этих трех объектов одни и те же. Эти три объекта являются схожими. Это понятно, так как большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки, комментарии, ссылки и многое другое - может составлять любую подобласть документа, в том числе и выделенную подобласть. Значит, большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection . Это приятно - ведь с большинством свойств этих объектов мы уже знакомы!
Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range :
Сколько объектов Range упоминается в этом предложении? Правильный ответ: 6, но не 3. Напомним: на нижнем уровне отсутствуют классы, определяющие символ, слово или предложение - все эти объекты принадлежат классу Range .
Для объекта Selection нельзя построить такую хитрую цепочку вложений - ведь метод Select не возвращает объект Selection . Но можно построить такую же "хитрую" последовательность операторов, которая задает сужающуюся область выделения:
Работа с текстом
Объекты Range и Selection позволяют выполнять основные операции над текстом (и не только над текстом): "выделить", "добавить", "заменить", "удалить". У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.
Говоря в этом параграфе о выделении, я имею в виду не применение метода Select , а выделение в более широком смысле, умение задать некоторую подобласть данной области. Выделить некоторую часть текста означает, по существу, определение объекта Range или Selection . Оба объекта задают непрерывную область, а их свойства Start и End позволяют задать начало и конец области. Меняя эти свойства, можно задать нужную область выделения. Этот основной способ выделения мы не раз демонстрировали в наших примерах:
В первом случае при задании области используются параметры Start и End , во втором - задается вся область данного объекта. Область может изменяться автоматически при добавлении или удалении из нее части текста. Изменить область можно и путем ее перемещения. Этим занимается специальная группа методов перемещения Move. Прежде чем говорить о перемещении, рассмотрим сжатие области. Нередко нужна пустая область - точка вставки, параметры Start и End которой совпадают. Поэтому простейший способ сжатия - задать совпадающие значения этих параметров:
Для сжатия области можно применять специальный метод сжатия - Collapse(Direction). Область стягивается в начальную или конечную позицию. Направление сжатия задает параметр Direction, принимающий значения wdCollapseStart или wdCollapseEnd . По умолчанию область стягивается в начальную точку (значение параметра: wdCollapseStart ). Если сжимается абзац, и он стягивается в конечную точку, точка вставки переносится за метку конца абзаца и устанавливается в начало следующего абзаца. Если такой эффект нежелателен, после сжатия применяется метод перемещения MoveEnd , передвигающий точку вставки назад на один символ:
Если есть методы сжатия области, то должны быть и методы расширения области. Основным из них является метод Expand (Unit). В зависимости от значения параметра Unit область можно расширить на слово, предложение, абзац, раздел, на строку или столбец таблицы, или на всю таблицу. Для объекта Selection область можно расширить на всю строку. Для расширения области на весь фрагмент можно использовать метод WholeStory , что впрочем эквивалентно вызову метода Expand (Unit := wdStory)
Метод Move является основным методом перемещения. Остальные методы - в той или иной степени его модификации. Метод Move ( Unit , Count ) сжимает область в точку, стягивая ее в начало или конец, и затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, а Count - количество этих единиц и направление стягивания и перемещения (по умолчанию 1). Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные - стягивание в начало и перемещение назад. Само стягивание означает перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.
Методы перемещения на сам текст не влияют - лишь изменяют область, заданную объектами Range и Selection . Поэтому эти методы применимы только к переменным типа Range , но не к фиксированным областям. Например, запись:
не имеет эффекта, поскольку область первого абзаца - вещь неизменяемая.
Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, и остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно расширяя тем самым область.
Конечно, для перемещения по тексту документу есть много различных возможностей, кроме группы методов Move . Стоит упомянуть группу методов Next, основным из которых является метод Next(Unit,Count). Основное отличие от метода Move с теми же параметрами состоит в том, что метод Next возвращает сам объект Range , в отличие от метода Move , возвращающего число символов, на которое произошло перемещение. Напомним также о тех возможностях перемещения, которыми обладают объекты Browser и Hyperlink , напомним о закладках, специально предназначенных для перехода к ним.
Удаление текста
Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection . Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count . Вот несколько примеров:
Вставка текста
Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр Text типа String задает текст, вставляемый до или после области, заданной объектами Range или Selection . После вставки текста область автоматически расширяется, включая в себя добавляемый текст. Вот пример вставки нового абзаца в начало документа:
Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text), - лучше использовать свойство. Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. При вставке внутрь области, например, при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области. Эта вроде бы безобидная программка сотрет все содержимое документа, заменив его пустым абзацем:
Говоря о методах вставки текста, нельзя не упомянуть о таком мощном методе, как InsertFile - он позволяет вставлять не только текст или таблицу Excel, но и целый документ, хранящийся в файле. Вот простой пример вызова метода, при котором в начало активного документа вставляется существующий документ:
Работа с буфером
Известно, как полезен буфер при работе с одним и, особенно, с несколькими документами. Объекты Range и Selection в полной мере позволяют задействовать все возможности буфера. Метод Copy, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод Cut, действуя аналогично, копирует объект в буфер, заодно удаляя его. Заметьте, что в отличие от предыдущей версии, теперь метод Cut работает, как ему положено, не только копируя объект, но и удаляя его, ранее удаления не происходило, вместо этого объект, вызывавший метод стягивался в точку. Метод Paste позволяет приклеить объект, помещенный в буфер. Рассмотрим пример:
Метод Paste позволяет "вклеить" содержимое буфера в область, заданную объектами Range и Selection . Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection , стянутым в точку вставки. В выполнении этого метода есть нюансы. У объекта Range содержимое буфера включается в его область, Объект Selection остается точкой вставки, расположенной после текста, добавленного из буфера.
Заметьте, в буфер можно копировать не только текст. В нашем следующем примере в буфер копируется рисунок, являющийся элементом коллекции TableOfFiguress . Напомню, что элементы этой коллекции вставляются аналогично символам текста и являются частью абзаца. В тестовом документе DocOne, с которым я работаю, в начало текста вставлен рисунок мышки. Я буду работать с первым абзацем этого текста, содержащим этот рисунок, как с обычным текстом, выделю рисунок, помещу его в буфер, а затем приклею в другом месте текста. Вот код соответствующей процедуры:
Иногда в буфер копируют формат текста. Этим занимается метод CopyFormat , копирующий формат по первому символу объекта Selection . Если этот символ - метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект Selection .
Метод PasteFormat применяет форматирование, хранящееся в буфере к объекту Selection .
Метод PasteSpecial позволяет явно управлять форматированием в момент вставки объекта из буфера.
Обычной задачей при Visual Basic является указать область в документе, а затем сделать что-то с ним, например вставить текст или применить форматирование. Например, может потребоваться написать макрос, который находит слово или фразу в части документа. Часть документа может быть представлена объектом Range . После идентифицированного объекта Range можно применить методы и свойства объекта Range для изменения содержимого диапазона.
Объект Range относится к соразмерной области в документе. Каждый объект Range определяется исходной и завершаемой позицией символов. Подобно способу использования закладок в документе, объекты Range используются в Visual Basic для определения определенных частей документа. Объект Range может быть не меньше точки вставки или не меньше, чем весь документ. Однако, в отличие от закладки, объект Range существует только во время процедуры, определяемой для него.
Свойства Start, End и StoryType однозначно идентифицируют объект Range . Свойства Start и End возвращают или устанавливают начальные и конечные позиции символов объекта Range . Положение символов в начале документа нулевое, положение после первого символа — одно и так далее. Существует несколько типов рассказов, представленных константами WdStoryType свойства StoryType .
Объекты диапазона не зависят от выбора. То есть можно определить и изменить диапазон без изменения текущего выбора. Можно также определить несколько диапазонов в документе, но в области документов имеется только один выбор.
Использование метода Range
Используйте метод Range объекта Document , чтобы создать объект Range , расположенный в основном рассказе и с заданной точкой запуска и конечной точки. В следующем примере создается объект Range , который начинается в начале первого символа и распространяется на десятый символ.
Вы можете видеть, что объект Range создается при применении свойства или метода к объекту Range . Например, ниже применяется смелый форматирование первых 10 символов в активном документе.
Если требуется несколько раз сослаться на объект Range , можно использовать заявление Set , чтобы установить переменную, равную объекту Range . Однако если требуется выполнить только одно действие на объекте Range , вам не нужно хранить объект в переменной. Такой же результат можно достичь с помощью только одной инструкции, которая определяет диапазон и изменяет свойство Bold .
Как и закладки, диапазон может охватывать группу символов или отмечать расположение в документе. Объект Range в следующем примере имеет те же точки начала и окончания. Диапазон не включает текст. В следующем примере вставляется текст в начале активного документа.
Можно определить начало и конечные точки диапазона с помощью чисел позиций символов, как показано выше, или использовать свойства Начните и Конец с такими объектами, как Выбор****, Закладки или Объекты Диапазона. В следующем примере создается объект Range , начинающийся в начале второго абзаца и заканчивающийся после третьего абзаца.
Дополнительные сведения и примеры см. в методе Range .
Использование свойства Range
Свойство Range отображается на нескольких объектах, таких как Paragraph, Bookmark и Cell, и используется для возврата объекта Range . В следующем примере возвращается объект Range , который ссылается на первый абзац в активном документе.
После того как у вас есть объект Range , вы можете использовать любые его свойства или методы для изменения объекта Range . В следующем примере выбирается второй абзац в активном документе, а затем центр выбора.
Если вам нужно применить множество свойств или методов к одному объекту Range , вы можете использовать с. End With structure. В следующем примере форматирование текста в первом абзаце активного документа.
Дополнительные сведения и примеры см. в разделе Свойство Range .
Переопределение объекта Range
Используйте метод SetRange для переопределения существующего объекта Range . В следующем примере диапазон определяется как текущий выбор. Метод SetRange затем переопределяет диапазон так, чтобы он ссылается на текущий выбор плюс следующие 10 символов.
Дополнительные сведения и примеры см. в методе Range для документа.
При отладе макроса можно использовать метод Select , чтобы убедиться, что объект Range ссылается на правильный диапазон текста. Например, ниже выбирается объект Range , который ссылается на второй и третий абзацы в активном документе, а затем форматировать шрифт выбора.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Как уже говорилось, чаще всего разработчиками для определения места ввода текста и навигации по документу используется объект Selection. Для этих же целей можно использовать и объект Range. Главное отличие между объектами Range и Selection заключается в том, что объект Selection может определить и пользователь (выделив текст мышью), а объект Range можно определить только программно, и он не зависит от текущего положения указателя или действий пользователя.
Рекомендуется, если это возможно, всегда использовать объект Range вместо объекта Selection. Тем самым мы защищаем себя от возможных ошибок, связанных с действиями пользователя (например, если пользователь в момент, когда программно вводится текст, щелкнет мышью по какому-либо месту в документе).
Формальное определение объекта Range выглядит так: это программный объект, который представляет непрерывный участок текста в документе. Этот объект не зависит от объекта Selection — вы можете работать с объектом Range, не изменяя текущего выделения. Он может не включать в себя ни одного символа (представлять курсор ввода текста).
Объектов Range в каждый момент времени может быть сколько угодно, а объектов Selection — только один.
Как создается объект Range:
- первый способ — воспользоваться методом Range() объекта Document. В этом случае вам потребуется передать номера начального и конечного символа диапазона, а также document story, в который будут отсчитываться эти символы. Например, создать диапазон, который будет включать в себя первые 10 символов документа, можно так:
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
- второй способ — воспользоваться свойством Range, которое предусмотрено для огромного количества объектов ( Bookmark, Selection, Table-Row-Cell, Paragraph и т.п.). В этом случае при помощи этого свойства мы получаем объект Range, представляющий данный объект;
- третий способ — воспользоваться большим количеством вспомогательных свойств (Characters, Words, Sentences и т.п.), которые делят текст на отрезки — объекты Range. Эти свойства возвращают коллекции объектов Range. Конечно, если вы создаете коллекцию объектов Range, представляющих каждый символ большого документа, с точки зрения производительности такое решение может быть не самым лучшим;
- четвертый способ — переопределить существующий объект Range. Обычно для этой цели используется метод Range.SetRange();
- ну и, наконец, пятый способ, самый удобный в реальных приложениях. Он заключается в том, что вы вначале создаете шаблон нужного вам документа (договора, приходного ордера, отчета и т.п.), в который при создании помещаете закладки в тем места, в которые потом потребуется произвести вставку данных. Затем программным способом для каждой закладки создается объект Range, и уже с его помощью производится ввод информации (данные о заказчике, сумма в кассовом ордере и т.п.)
Для целей отладки (чтобы убедиться, что объект Range действительно включает в себя тот участок текста, который вы планировали) можно создавать на основе объекта Range объект Selection (то есть выделять диапазон). Для этого у объекта Range предусмотрен метод Select().
Большая часть свойств и методов объекта Range совпадает с аналогичными свойствами и методами объекта Selection (которые мы уже рассмотрели), поэтому рассматривать здесь мы их не будем. Точно так же чаще всего для объекта Range используется одно-единственное свойство Text, которое позволяет ввести в место в документе, представленное этим объектом, нужный текст. Ниже приведена информация о некоторых уникальных методах объекта Range:
- InsertDatabase() — возможно, самый простой метод вставить результат запроса к базе данных в файл Word. Генерирует таблицу на основе возвращаемого результата запроса и вставляет ее по месту, определенному объектом Range. Умеет работать по ODBC, DDE, есть встроенные средства работы с MS Access. Возможности этого метода очень ограничены, поэтому рекомендуется использовать его только в самых простых случаях. Во всех остальных случаях лучше использовать объектную библиотеку ADO (см. предыдущую главу). Пример обращения к файлу Access средствами этого метода может выглядеть так:
Format:=wdTableFormatSimple2, Style:=191, _
DataSource:="C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Борей.mdb"
В отличии от Selection, Range позволяет не выделить, а выбрать заданный диапазон текста в ворде. Использовать Range более выгодно, чем Selection, так как получить выбор можно только программно, это работает нам на руку, так как пользователь не сможет повлиять на работу макроса или программного кода. Поясню: допустим, мы хотим обработать текст в ворде с помощью объекта Selection, выделив нужный диапазон. Если пользователь во время обработки щелкнет мышью и снимет выделение, то наш макрос потерпит поражение . В случае с Range такой неприятности не произойдет, поэтому и рекомендуется использовать вместо Selection.
Получить доступ к объекту можно несколькими способами:
Одноименный метод объекта Document – данный метод принимает два необязательных параметра, которые задают начальное и конечное значение выбора при работе с текстом в Word. Если вызвать метод без параметров, то будет выбрано содержимое всего документа, например:
' Выбираем весь текст set oRange = oDoc(1).Range() 'Делаем шрифт жирным oRange.Bold = true
Или такой вариант:
'Выбираем первые 10 символов set oRange = oDoc(1).Range(0,10)
Одноименное свойство – данное свойство предусмотрено для большинства классов Word (Bookmark, Selection, Table, Row, Cell, Paragraph и так далее). В данном случае мы получаем Range для заданного класса, автоматически произойдет выбор содержимого данного класса (абзац, выделение, закладка и так далее).
Метод SetRange() – Данный метод предоставляет сам объект Range, и он позволяет переопределить выбор текста в ворде, например:
set oRange1 = oDoc(1).Range() oRange1.SetRange 1,10 oRange1.Bold = true
Класс Range – выбираем текст в ворде
Свойства – работа с текстом в ворде
Свойства, которые позволяет задать или получить значение константы:
Case – Регистр текста в ворд, константа WdCharacterCase:
- wdNextCase - -1 – Как в предложении
- wdLowerCase - 0 - Нижний регистр
- wdUpperCase - 1 - Верхний регистр
- wdTitleWord - 2 – Начало слова с заглавной буквы
- wdTitleSentence - 4 - в режиме ввода предложения
- wdToggleCase - 5 – Инвертировать регистр
CharacterWidth - Ширина символов, константа WdCharacterWidth:
- wdWidthFullWidth - 7 – Полная ширина.
- wdWidthHalfWidth - 6 – Половина ширины (нормальный режим).
HorizontalInVertical – Расположение текста в ворде, константа WdHorizontalInVerticalType:
- wdHorizontalInVerticalNone - 0 – Форматирование отсутствует
- wdHorizontalInVerticalFitInLine - 1 – Горизонтальное направление
- wdHorizontalInVerticalResizeLine - 2 – Вертикальное направление
Orientation - Направление ворд текста, константа WdTextOrientation:
- wdTextOrientationHorizontal - 0 – Горизонтально, по умолчанию.
- wdTextOrientationVerticalFarEast - 1 – Вертикально вниз от верхней части, справа налево.
- wdTextOrientationUpward - 2 - Вверх под углом.
- wdTextOrientationDownward - 3 – Вниз под углом.
- wdTextOrientationHorizontalRotatedFarEast - 4 - Горизонтально, но справа налево (только для языков с данным типом письма).
- wdTextOrientationVertical - 5 - Вертикально вниз от верхней части, слева направо.
HighlightColorIndex – Цвет выделения текста в ворде, константа WdColorIndex.
LanguageIDOther – Язык текста в ворд, константа, WdLanguageID.
Style – Стиль, константа WdBuiltinStyle.
Underline – Тип подчеркивания, константа WdUnderline.
Свойства, которые позволяют задать или получить логическое значение:
Bold – Делает шрифт жирным (true).
Italic - Делает шрифт курсивом (true).
GrammarChecked – Проверка грамматики.
LanguageDetected – Определение языка.
Прочие свойства (чтение и запись), только последнее доступно только для чтения.
Start и End – Начальная и конечная позиция для выбора.
FitTextWidth - Ширина текста в текущих единицах измерения.
ID - Имя идентификатора (строковое значение) для указанного диапазона.
Text – Позволяет вставить (в место, где находится курсор), заменить (выбранную область), или получить текст в ворде для заданного диапазона.
Information (type) - Информация об указанном диапазоне (параметр type содержит значение константы WdInformation. Только чтение.
Методы – работа с текстом в Word
CheckGrammar () - Начинает проверку орфографии и грамматики для указанного диапазона.
CheckSynonyms () - Отображает диалоговое окно "Тезаурус".
Collapse (Direction) - Убирает выделение.
Direction – Дополнительный параметр, который задает направление от позиции курсора. Может быть одним из следующих значений константы WdCollapseDirection: wdCollapseEnd - 0 или wdCollapseStart - 1. Значение по умолчанию wdCollapseStart.
ComputeStatistics (Statistic) – Позволяет получить статистику для заданного выбора. Параметр Statistic содержит значения константы WdStatistic.
Copy (), Delete (), Cut () – Копирование, удаление и вырезание выбранного диапазона.
Paste () – Вставка содержимого буфера обмена.
CopyAsPicture () – Копирование текста в ворде как изображения.
Select () – Выделение текущего выбора.
SetRange (Start, End) – Позволяет задать начальную и конечную позицию для выбора, вернет новый объект Range.
Relocate (Direction) — Переставляет местами абзацы в выбранном диапазоне.
Direction – Обязательный параметр, который задает направление, содержит значение константы WdRelocate:
- wdRelocateDown - 1 - Ниже следующего видимого абзаца.
- wdRelocateUp - 0 - Выше предыдущего видимого абзаца.
Ниже я привел два примера программного кода на языке VBScript и JScript, в них я просто выбираю каждый символ в тексте и задаю для него цвет выделения. Работа с текстами в Word. Причем так, что бы цвета периодически менялись.
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Работа с текстом в ворде ' Выделение разными цветами ' Range1.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange, j Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection Set oPars = oSel.Paragraphs oWord.Visible = True MyText = "Работа с текстом в Word " ' Вставляем текст For i=0 to 4 oSel.TypeText MyText & MyText & MyText & MyText & MyText & MyText & MyText oSel.TypeParagraph Next ' Создаем ссылку ' Заодно выбираем весь текст в ворде set oRange = oDoc(1).Range() i = 1:j = 0 ' Обрабатываем каждый символ Do While i
Программный код на языке JSCRIPT:
Хорошо, с программированием закончили, теперь можно дать некоторые пояснения. И так, оба примера работают с текстом в Word одинаково. Имена переменных практически идентичны, только для JSCRIPT я к имени переменных добавил 1. В самом начале происходит подключение основных классов для доступа к приложению Microsoft Word, создание нового документа - "Коллекция Documents", делаем документ видимым. Далее в цикле FOR - "Урок 9 по JScript - оператор цикла for" и "Урок 6 по VBScript: Циклы for…next и for each…next" происходит работа с текстом в ворд, а именно – добавление несколько раз содержимого переменной MyText.
Переменная oRange будет содержать ссылку н6а класс, используя цикл WHILE - "Урок 7 по VBScript: Циклы do…loop и while…wend" и "Урок 10 по JScript: Цикл while и do. while", мы начинаем обрабатывать каждый символ и менять его цвет, естественно, что количество возможных цветов ограничено. Поэтому нам приходится дополнительно добавить переменные i и j. Ну и все, результат работы можно увидеть на рисунке выше.
Спасибо за внимание. Автор блога Владимир Баталий
Последнее время я часто сталкиваюсь с его использованием. На изученных мною ресурсах, посвященных VBA для Word , почему-то мало внимания уделяется такому важному представителю объектной модели. С его помощью можно, поистине, творить чудеса с документом.
Этот объект гораздо удобнее Selection , потому что позволяет не выделять нужную область на экране, а работать прямо с представлением документа в памяти. Это заметно ускоряет работу макросов, которые, по правде сказать, не отличаются быстродействием. При отладке программ бывает полезно воспользоваться методом Range.Select , чтобы убедиться, что вы работаете с нужным вам диапазоном.
Что же это за объект? Сразу хочу предупредить, что писать я буду, основываясь на своем понимании найденного и прочитанного в других источниках. В дословном переводе Range означает «Диапазон». Применительно к Word это означает диапазон свойств или методов, доступных для того или иного объекта. Например, как узнать текст второго абзаца в документе? Вот так:
Стоит отметить, что это вернет весь текст в абзаце с символом конца абзаца ( ¶ ). Его можно удалить функцией Replace заменив символ vbCr на пустую строку.
Но главная фишка объекта Range совсем не в этом. А в том, что его можно передвигать и изменять в размерах практически произвольно (в пределах документа, естественно). У каждого объекта Range есть два свойства: Range.Start и Range.End . Начальный и конечный символ диапазона, считая от начала документа. Начало и конец диапазона можно задавать, указывая эти свойства напрямую, а можно такой конструкцией:
Изменить размер уже существующего диапазона можно с помощью метода SetRange , в котором указать номер символа, с которого диапазон начинается, и каким заканчивается. Этот метод используется тогда, когда нужно изменить уже существующий диапазон. Этот метод ничего не возвращает, а работает со своим родительским объектом
С помощью Range можно получить такие объекты документа, для которых не предусмотрено коллекций, как, например, для абзацев (коллекция Paragraphs ). Такими «бесхозными» объектами являются строки и страницы. Кто знает другие, пусть напишет.
Как получить страницу из документа со всем ее содержимым? Коллекции Pages не существует, что же делать? Вот здесь и понадобится Range и его метод GoTo
Таким образом можно, например, сохранить каждую страницу документа в файл. На одном форуме я выкладывал пример такого макроса, нашлись даже добровольцы, которые довели его почти до совершенства.
Читайте также: